From 32db4d79d67506a270cce6c1372c5ca3e76689e6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 13 Jan 2021 12:42:29 -0800 Subject: [PATCH 001/336] [Admin] Add prod versions of playlists and view directories (#515) --- config/build.documentation.ts | 2 +- config/build.ts | 48 +- playlists-prod/excel.yaml | 1134 ++++++++++++++++++++++++ playlists-prod/outlook.yaml | 625 +++++++++++++ playlists-prod/powerpoint.yaml | 63 ++ playlists-prod/project.yaml | 11 + playlists-prod/word.yaml | 193 ++++ snippet-extractor-output/snippets.yaml | 1066 +++++++++++----------- view-prod/excel.json | 121 +++ view-prod/outlook.json | 69 ++ view-prod/powerpoint.json | 9 + view-prod/project.json | 3 + view-prod/word.json | 23 + 13 files changed, 2831 insertions(+), 536 deletions(-) create mode 100644 playlists-prod/excel.yaml create mode 100644 playlists-prod/outlook.yaml create mode 100644 playlists-prod/powerpoint.yaml create mode 100644 playlists-prod/project.yaml create mode 100644 playlists-prod/word.yaml create mode 100644 view-prod/excel.json create mode 100644 view-prod/outlook.json create mode 100644 view-prod/powerpoint.json create mode 100644 view-prod/project.json create mode 100644 view-prod/word.json diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 956b59c3e..237f79279 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -146,7 +146,7 @@ function getExtractedDataFromSnippet( // 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/master/' + editedFilename + '\n'; + text = '// Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/' + editedFilename + '\n'; text += indented .map(line => { diff --git a/config/build.ts b/config/build.ts index 580d01f7e..41e1700db 100644 --- a/config/build.ts +++ b/config/build.ts @@ -7,7 +7,7 @@ import { status } from './status'; import { SnippetFileInput, SnippetProcessedData, followsNamingGuidelines, isCUID, - rmRf, mkDir, getFiles, writeFile, banner, getPrintableDetails, Dictionary + rmRf, mkDir, readDir, getFiles, writeFile, banner, getPrintableDetails, Dictionary } from './helpers'; import { buildReferenceDocSnippetExtracts } from './build.documentation'; import { getShareableYaml } from './snippet.helpers'; @@ -47,6 +47,7 @@ const defaultApiSets = { .then(updateModifiedFiles) .then(() => checkSnippetsForUniqueIDs(processedSnippets)) .then(() => generatePlaylists(processedSnippets)) + .then(copyAndUpdatePlaylistFolders) .then(() => buildReferenceDocSnippetExtracts(processedSnippets, accumulatedErrors)) .then(() => { if (accumulatedErrors.length > 0) { @@ -122,7 +123,6 @@ async function processSnippets(processedSnippets: Dictionary'}/${''}/${''}` + `OfficeDev/office-js-snippets/master` + `/${dir}/${file.host}/${file.group}/${file.file_name}`; @@ -576,6 +576,50 @@ async function generatePlaylists(processedSnippets: Dictionary updateCopiedFile(playlistsProdFolderPath, file)))); + + /* Copying view directory */ + let viewProdFolderName = `view-prod`; + status.add(`Creating \'${viewProdFolderName}\' folder`); + await rmRf(viewProdFolderName); + let viewProdFolderPath = await mkDir(viewProdFolderName); + status.complete(true /*success*/, `Creating \'${viewProdFolderName}\' folder`); + + await fsx.copy('view', viewProdFolderName); + let viewFiles = await readDir(viewProdFolderPath); + (await Promise.all(viewFiles.map(file => updateCopiedFile(viewProdFolderPath, file)))); +} + +// helper for copyAndUpdatePlaylistFolders +async function updateCopiedFile(folderPath: string, filePath: string) { + const fullPath = path.resolve(folderPath, filePath); + let content = fsx.readFileSync(fullPath).toString().trim().replace( + /\/OfficeDev\/office-js-snippets\/master/g, + '/OfficeDev/office-js-snippets/prod'); + const fileUpdates = []; + fileUpdates.push( + Promise.resolve() + .then(async () => { + const updatingStatusText = `Updating copied file ${fullPath}`; + status.add(updatingStatusText); + await writeFile(fullPath, content); + status.complete(true /*succeeded*/, updatingStatusText); + }) + ); +} + function handleError(error: any | any[]) { if (!isArray(error)) { error = [error]; diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml new file mode 100644 index 000000000..048384e78 --- /dev/null +++ b/playlists-prod/excel.yaml @@ -0,0 +1,1134 @@ +- id: excel-basics-basic-api-call + name: Basic API call (TypeScript) + fileName: basic-api-call.yaml + description: Performs a basic Excel API call using TypeScript. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/01-basics/basic-api-call.yaml + group: Basics + api_set: + ExcelApi: '1.1' +- id: excel-basics-basic-api-call-es5 + name: Basic API call (JavaScript) + fileName: basic-api-call-es5.yaml + description: Performs a basic Excel API call using plain JavaScript & Promises. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/01-basics/basic-api-call-es5.yaml + group: Basics + api_set: + ExcelApi: '1.1' +- id: excel-basics-basic-common-api-call + name: Basic API call (Office 2013) + fileName: basic-common-api-call.yaml + description: >- + Performs a basic Excel API call using JavaScript with the "common API" + syntax (compatible with Office 2013). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/01-basics/basic-common-api-call.yaml + group: Basics + api_set: + Selection: 1.1 +- id: excel-chart-axis + name: Axis details + fileName: chart-axis.yaml + 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 + api_set: + ExcelApi: '1.7' +- id: excel-chart-axis-formatting + name: Axis formatting + fileName: chart-axis-formatting.yaml + description: Formats the vertical and horizontal axes in a chart. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis-formatting.yaml + group: Chart + api_set: + ExcelApi: '1.8' +- id: excel-chart-bubble-chart + name: Create bubble chart + fileName: chart-bubble-chart.yaml + description: >- + Creates a bubble chart with each data row represented as a single chart + series (bubble). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml + group: Chart + api_set: + ExcelApi: '1.12' +- id: excel-chart-create-several-charts + name: Create charts + fileName: chart-create-several-charts.yaml + description: >- + Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, + and 100% charts. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-create-several-charts.yaml + group: Chart + api_set: + ExcelApi: '1.4' +- id: excel-chart-create-doughnut-chart + name: Doughnut chart + fileName: create-doughnut-chart.yaml + description: Creates a doughnut chart and adjusts its size. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/create-doughnut-chart.yaml + group: Chart + api_set: + ExcelApi: '1.7' +- id: excel-chart-formatting + name: Formatting + fileName: chart-formatting.yaml + description: Formats labels and lines of a slope chart. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-formatting.yaml + group: Chart + api_set: + ExcelApi: '1.8' +- id: excel-chart-legend + name: Legend + fileName: chart-legend.yaml + description: Formats the legend's font. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-legend.yaml + group: Chart + api_set: + ExcelApi: '1.7' +- id: excel-chart-point + name: Points + fileName: chart-point.yaml + description: Sets the color of a point on the chart. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-point.yaml + group: Chart + api_set: + ExcelApi: '1.7' +- id: excel-chart-series + name: Series + fileName: chart-series.yaml + description: Adds and deletes series in a chart. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml + group: Chart + api_set: + ExcelApi: '1.7' +- id: excel-chart-series-markers + name: Series markers + fileName: chart-series-markers.yaml + description: Sets the chart series marker properties. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml + group: Chart + api_set: + ExcelApi: '1.7' +- id: excel-chart-series-plotorder + name: Series plot order + fileName: chart-series-plotorder.yaml + description: Orders the plotting of series in a chart. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-plotorder.yaml + group: Chart + api_set: + ExcelApi: '1.7' +- id: excel-chart-title-format + name: Title format + fileName: chart-title-format.yaml + description: Adjust a chart title's format. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.yaml + group: Chart + api_set: + ExcelApi: '1.7' +- id: excel-chart-trendlines + name: Trendlines + fileName: chart-trendlines.yaml + 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 + api_set: + ExcelApi: '1.7' +- id: excel-comment-basics + name: Comment basics + 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 + api_set: + ExcelApi: '1.10' +- id: excel-comment-mentions + name: Comment mentions + 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 + api_set: + ExcelApi: '1.11' +- id: excel-comment-replies + name: Comment replies + 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 + api_set: + ExcelApi: '1.10' +- id: excel-comment-resolution + name: Comment resolution + 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 + api_set: + ExcelApi: '1.10' +- id: excel-range-conditional-formatting-basic + name: Basic conditional formatting + fileName: conditional-formatting-basic.yaml + description: Applies common types of conditional formatting to ranges. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + group: Conditional Formatting + api_set: + ExcelApi: '1.6' +- id: excel-range-conditional-formatting-advanced + name: Advanced conditional formatting + fileName: conditional-formatting-advanced.yaml + description: Applies more than one conditional format on the same range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml + group: Conditional Formatting + api_set: + ExcelApi: '1.6' +- id: excel-custom-functions-basic + name: Basic custom function + fileName: basic-function.yaml + description: Calculates the volume of a sphere. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/basic-function.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.1 +- id: excel-custom-functions-volatile + name: Volatile function + fileName: volatile-function.yaml + description: Rolls a 6 sided die that returns a possible new value every calculation. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/volatile-function.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.1 +- id: excel-custom-functions-streaming + name: Streaming function + fileName: streaming-function.yaml + description: A streaming function that continuously increments the cell value. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/streaming-function.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.1 +- id: excel-custom-functions-web-call + name: Web request to GitHub API + fileName: web-call-function.yaml + description: Calls the GitHub API to get the star count for an org/user and repository. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/web-call-function.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.1 +- 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.' + 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 + api_set: + ExcelApi: '1.5' +- id: excel-custom-xml-parts-test-xml-for-unique-namespace + name: Unique namespaces in custom XML + fileName: test-xml-for-unique-namespace.yaml + description: Tests to see if there is only one XML part for a specified namespace. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml + group: Custom XML Parts + api_set: + ExcelApi: '1.5' +- id: excel-data-validation + name: Data validation + fileName: data-validation.yaml + description: >- + Sets data validation rules on ranges, prompts users to enter valid data, and + displays messages when invalid data is entered. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml + group: Data Validation + api_set: + ExcelApi: '1.8' +- id: excel-document-get-file-in-slices-async + name: Get file using slicing + fileName: get-file-in-slices-async.yaml + description: >- + Uses slicing to get the byte array and base64-encoded string that represent + the current document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/get-file-in-slices-async.yaml + group: Document + api_set: + ExcelApi: '1.4' +- id: excel-document-properties + name: Properties + fileName: properties.yaml + description: Gets and sets document properties. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/properties.yaml + group: Document + api_set: + ExcelApi: '1.7' +- id: excel-document-custom-properties + name: Custom properties + fileName: custom-properties.yaml + description: Gets and sets custom properties at the document and worksheet levels. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml + group: Document + api_set: + ExcelAPI: '1.12' +- id: excel-events-chartcollection-added-activated + name: Chart collection events + fileName: events-chartcollection-added-activated.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chartcollection-added-activated.yaml + group: Events + api_set: + ExcelApi: '1.8' +- id: excel-events-chart-activated + name: Chart events + fileName: events-chart-activated.yaml + description: >- + Registers event handlers on an individual chart that run when the chart is + activated or deactivated. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml + group: Events + api_set: + ExcelApi: '1.8' +- id: excel-event-column-and-row-sort + name: Column and row sort events + fileName: event-column-and-row-sort.yaml + description: >- + Registers event handlers that run when column or row sorting events occur in + the current worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml + group: Events + api_set: + ExcelApi: '1.10' +- id: excel-events-data-changed + name: Data change event + fileName: data-changed.yaml + description: Registers an event handler that runs when data is changed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-changed.yaml + group: Events + api_set: + ExcelApi: '1.4' +- id: excel-data-change-event-details + name: Data change event details + fileName: data-change-event-details.yaml + description: Uses the onChanged event of a table to determine the specifics of changes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-change-event-details.yaml + group: Events + api_set: + ExcelApi: '1.9' +- id: excel-events-disable-events + name: Enable and disable events + fileName: events-disable-events.yaml + description: Toggles event firing on and off. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml + group: Events + api_set: + ExcelApi: '1.8' +- id: excel-selection-changed-events + name: Selection change events + fileName: selection-changed-events.yaml + description: >- + Registers handlers all the different `onSelectionChanged` events and + displays how each event reports the selected addresses. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/selection-changed-events.yaml + group: Events + api_set: + ExcelApi: '1.7' +- id: excel-event-worksheet-single-click + name: Single click event + fileName: event-worksheet-single-click.yaml + description: >- + Registers an event handler that runs when a single-click event occurs in the + current worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml + group: Events + api_set: + ExcelApi: '1.10' +- id: excel-events-tablecollection-changed + name: Table collection events + fileName: events-tablecollection-changed.yaml + description: Registers an event handler that runs when a table collection is changed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml + group: Events + api_set: + ExcelApi: '1.7' +- id: excel-events-table-changed + name: Table events + fileName: events-table-changed.yaml + description: Registers event handlers that run when a table is changed or selected. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml + group: Events + api_set: + ExcelApi: '1.7' +- id: excel-events-workbook-and-worksheet-collection + name: Workbook and worksheet collection events + fileName: events-workbook-and-worksheet-collection.yaml + description: >- + Registers event handlers that run when a worksheet is added, activated, or + deactivated, or when the settings of a workbook are changed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + group: Events + api_set: + ExcelApi: '1.7' +- id: excel-events-worksheet + name: Worksheet events + fileName: events-worksheet.yaml + description: >- + Registers event handlers that run when data is changed in worksheet, the + selected range changes in a worksheet, or the worksheet is recalculated. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml + group: Events + api_set: + ExcelApi: '1.7' +- id: excel-events-comments + name: Comment events + fileName: events-comment-event-handler.yaml + description: >- + Registers event handlers to listen for comment additions, changes, and + deletions. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + group: Events + api_set: + ExcelAPI: '1.12' +- id: excel-named-item-create-and-remove-named-item + name: 'Create, access, and remove' + fileName: create-and-remove-named-item.yaml + 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 + api_set: + ExcelApi: '1.4' +- id: excel-update-named-item + name: Update + fileName: update-named-item.yaml + description: Creates and then updates a named item. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/update-named-item.yaml + group: Named Item + api_set: + ExcelApi: '1.7' +- id: excel-pivottable-calculations + name: Calculations + fileName: pivottable-calculations.yaml + description: Changes the calculations the PivotTable performs. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml + group: PivotTable + api_set: + ExcelApi: '1.8' +- id: excel-pivottable-create-and-modify + name: Create and modify + fileName: pivottable-create-and-modify.yaml + description: Creates and modifies a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + group: PivotTable + api_set: + ExcelApi: '1.8' +- id: excel-pivottable-filters-and-summaries + name: Filters and summaries + fileName: pivottable-filters-and-summaries.yaml + description: Filters PivotTable data and shows different summarizations. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + group: PivotTable + api_set: + ExcelApi: '1.8' +- id: excel-pivottables-get-pivottables + name: Get PivotTables + fileName: pivottable-get-pivottables.yaml + description: >- + Get existing PivotTables in the workbook through their collections and + through the ranges they occupy. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + group: PivotTable + api_set: + ExcelAPI: '1.12' +- id: excel-pivottable-slicer + name: Slicer + fileName: pivottable-slicer.yaml + description: Adds a slicer to a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + group: PivotTable + api_set: + ExcelApi: '1.10' +- id: excel-pivottables-pivotfilters + name: PivotFilters + fileName: pivottable-pivotfilters.yaml + description: Applies PivotFilters to a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + group: PivotTable + api_set: + ExcelAPI: '1.12' +- id: excel-range-auto-fill + name: Auto fill + fileName: range-auto-fill.yaml + description: Writes to cells with the auto fill feature. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml + group: Range + api_set: + ExcelApi: '1.10' +- id: excel-range-copyfrom + name: Copy and paste ranges + fileName: range-copyfrom.yaml + description: Copies or moves data and formatting from one range to another. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + group: Range + api_set: + ExcelApi: '1.10' +- id: excel-range-areas + name: Discontiguous ranges (RangeAreas) and special cells + fileName: range-areas.yaml + description: >- + Creates and uses RangeAreas, which are sets of ranges that need not be + contiguous, through user selection and programmatic selection of special + cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml + group: Range + api_set: + ExcelApi: '1.9' +- id: excel-range-find + name: Find text matches within a range + fileName: range-find.yaml + description: Finds a cell within a range based on string matching. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + group: Range + api_set: + ExcelApi: '1.9' +- id: excel-range-formatting + name: Formatting + fileName: formatting.yaml + description: Formats a range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/formatting.yaml + group: Range + api_set: + ExcelApi: '1.4' +- id: excel-range-cell-properties + name: Get and set cell properties + fileName: cell-properties.yaml + description: Sets different properties across a range then retrieves those properties. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml + group: Range + api_set: + ExcelApi: '1.9' +- id: excel-range-hyperlink + name: Hyperlinks + fileName: range-hyperlink.yaml + 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' + fileName: insert-delete-clear-range.yaml + 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 + api_set: + ExcelApi: '1.4' +- id: excel-outline + name: Outline + fileName: outline.yaml + description: Creates an outline by grouping rows and columns. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + group: Range + api_set: + ExcelApi: '1.10' +- id: excel-range-range-relationships + name: Range relationships + fileName: range-relationships.yaml + description: >- + Shows relationships between ranges, such as bounding rectangles and + intersections. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml + group: Range + api_set: + ExcelApi: '1.4' +- id: excel-range-remove-duplicates + name: Remove duplicates + fileName: range-remove-duplicates.yaml + description: Removes duplicate entries from a range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml + group: Range + api_set: + ExcelApi: '1.9' +- id: excel-range-selected-range + name: Selected range + fileName: selected-range.yaml + description: Gets and sets the currently selected range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/selected-range.yaml + group: Range + api_set: + ExcelApi: '1.1' +- id: excel-direct-precedents + name: Direct precedents + fileName: direct-precedents.yaml + description: >- + This sample shows how to find and highlight the precedents of the currently + selected cell. Precedents are cells referenced by the formula in a cell. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml + group: Range + api_set: + ExcelAPI: '1.12' +- id: excel-range-style + name: Style + fileName: style.yaml + description: >- + Creates a custom style, applies a custom and built-in styles to a range, + gets style properties, and deletes the custom style. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml + group: Range + api_set: + ExcelApi: '1.7' +- id: excel-range-text-orientation + name: Text orientation + fileName: range-text-orientation.yaml + description: Gets and sets the text orientation within a range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-text-orientation.yaml + group: Range + api_set: + ExcelApi: '1.7' +- id: excel-range-dynamic-arrays + name: Dynamic arrays + fileName: dynamic-arrays.yaml + description: >- + Applies formulas that use dynamic arrays and displays information about the + ranges used to display the data. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml + group: Range + api_set: + ExcelAPI: '1.12' +- id: excel-range-used-range + name: Used range + fileName: used-range.yaml + description: >- + Tests for a used range and creates a chart from a table only if there's data + in the table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml + group: Range + api_set: + ExcelApi: '1.4' +- id: excel-range-values-and-formulas + name: Values and formulas + fileName: set-get-values.yaml + description: Gets and sets values and formulas for a range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/set-get-values.yaml + group: Range + api_set: + ExcelApi: '1.4' +- id: excel-shape-create-and-delete + name: Create and delete geometric shapes + fileName: shape-create-and-delete.yaml + description: >- + Creates a few different geometric shapes and deletes them from the + worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-create-and-delete.yaml + group: Shape + api_set: + ExcelApi: '1.9' +- id: excel-shape-images + name: Image shapes + fileName: shape-images.yaml + description: Creates and adjusts image-based shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml + group: Shape + api_set: + ExcelApi: '1.9' +- id: excel-shape-lines + name: Lines + fileName: shape-lines.yaml + description: Creates and modifies line shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-lines.yaml + group: Shape + api_set: + ExcelApi: '1.9' +- id: excel-shape-move-and-order + name: Move and order shapes + fileName: shape-move-and-order.yaml + description: Moves created shapes around the worksheet and adjusts their z-order. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-move-and-order.yaml + group: Shape + api_set: + ExcelApi: '1.9' +- id: excel-shape-groups + name: Shape groups + fileName: shape-groups.yaml + description: Groups and ungroups shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.yaml + group: Shape + api_set: + ExcelApi: '1.9' +- id: excel-shape-textboxes + name: Textboxes + fileName: shape-textboxes.yaml + description: Creates a textbox shape and works with the text in it and other shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-textboxes.yaml + group: Shape + api_set: + ExcelApi: '1.9' +- id: excel-table-add-rows-and-columns-to-a-table + name: Add rows and columns + fileName: add-rows-and-columns-to-a-table.yaml + description: Adds rows and columns to a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-convert-range-to-table + name: Convert a range + fileName: convert-range-to-table.yaml + description: Converts a range to a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/convert-range-to-table.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-create-table + name: Create a table + fileName: create-table.yaml + description: Creates a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/create-table.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-filter-data + name: Filter data + fileName: filter-data.yaml + description: Filters table data. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/filter-data.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-formatting + name: Formatting + fileName: formatting.yaml + description: Formats a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/formatting.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-get-data-from-table + name: Get data + fileName: get-data-from-table.yaml + description: Gets data from a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/get-data-from-table.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-get-visible-range-of-a-filtered-table + name: Get visible range + fileName: get-visible-range-of-a-filtered-table.yaml + description: Gets the visible range from a filtered table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-import-json-data + name: Import JSON data + fileName: import-json-data.yaml + description: Imports JSON data into a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/import-json-data.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-table-sort-data + name: Sort data + fileName: sort-data.yaml + description: Sorts the data within a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/sort-data.yaml + group: Table + api_set: + ExcelApi: '1.4' +- id: excel-workbook-get-active-cell + name: Active cell + fileName: workbook-get-active-cell.yaml + description: Gets the active cell of the entire workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml + group: Workbook + api_set: + ExcelApi: '1.7' +- id: excel-settings-create-get-change-delete-settings + name: Add-in settings + fileName: create-get-change-delete-settings.yaml + description: >- + Creates, gets, changes, and deletes settings that are unique to the specific + workbook and add-in combination. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml + group: Workbook + api_set: + ExcelApi: '1.4' +- id: excel-workbook-calculation + name: Calculations + fileName: workbook-calculation.yaml + description: >- + Demonstrates the calculation APIs of the workbook: events for when the + worksheet recalculates and application-level calculation controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml + group: Workbook + api_set: + ExcelApi: '1.11' +- id: excel-workbook-create-workbook + name: Create workbook + fileName: create-workbook.yaml + description: >- + Creates a new, empty workbook and creates a new workbook by copying an + existing one. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-workbook.yaml + group: Workbook + api_set: + ExcelApi: '1.8' +- id: excel-culture-info + name: Culture info + fileName: culture-info.yaml + description: >- + This sample shows how to apply the cultural settings APIs to help normalize + data. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml + group: Workbook + api_set: + ExcelApi: '1.11' +- id: excel-culture-info-date-time + name: 'Culture info: date and time' + fileName: culture-info-date-time.yaml + description: >- + This sample shows how to use the read-only cultural settings APIs to + retrieve system date and time settings. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info-date-time.yaml + group: Workbook + api_set: + ExcelAPI: '1.12' +- id: excel-workbook-data-protection + name: Data protection + fileName: data-protection.yaml + description: Protects data in a worksheet and the workbook structure. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + group: Workbook + api_set: + ExcelApi: '1.7' +- id: excel-workbook-save-and-close + name: Save and close + fileName: workbook-save-and-close.yaml + description: Saves and closes a workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.yaml + group: Workbook + api_set: + ExcelAPI: '1.11' +- id: excel-worksheet-active-worksheet + name: Active worksheet + fileName: active-worksheet.yaml + description: Gets and sets the active worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/active-worksheet.yaml + group: Worksheet + api_set: + ExcelApi: '1.1' +- id: excel-worksheet-add-delete-rename-move-worksheet + name: 'Add, delete, rename, and move worksheet' + fileName: add-delete-rename-move-worksheet.yaml + 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 + api_set: + ExcelApi: '1.1' +- id: excel-worksheet-auto-filter + name: AutoFilter + fileName: worksheet-auto-filter.yaml + description: Adds an AutoFilter to a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml + group: Worksheet + api_set: + ExcelApi: '1.9' +- id: excel-worksheet-copy + name: Copy worksheet + fileName: worksheet-copy.yaml + description: Copies the active worksheet to the specified location. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml + group: Worksheet + api_set: + ExcelApi: '1.7' +- id: excel-worksheet-find-all + name: Find text matches within a worksheet + fileName: worksheet-find-all.yaml + description: Finds cells within a worksheet based on string matching. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml + group: Worksheet + api_set: + ExcelApi: '1.9' +- id: excel-worksheet-freeze-panes + name: Frozen panes + fileName: worksheet-freeze-panes.yaml + description: >- + Freezes columns, rows, and a range of cells. Gets the address of the frozen + pane. Unfreezes frozen panes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + group: Worksheet + api_set: + ExcelApi: '1.7' +- id: excel-worksheet-worksheet-range-cell + name: Get range or cell + fileName: worksheet-range-cell.yaml + description: >- + Gets the used range, the entire range of a worksheet, the specified range, + and the specified cell. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-range-cell.yaml + group: Worksheet + api_set: + ExcelApi: '1.4' +- id: excel-worksheet-gridlines + name: Gridlines + fileName: gridlines.yaml + description: Hides and shows a worksheet's gridlines. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/gridlines.yaml + group: Worksheet + api_set: + ExcelApi: '1.8' +- id: excel-worksheet-list-worksheets + name: List worksheets + fileName: list-worksheets.yaml + description: Lists the worksheets in the workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/list-worksheets.yaml + group: Worksheet + api_set: + ExcelApi: '1.1' +- id: excel-worksheet-page-layout + name: Page layout and print settings + fileName: worksheet-page-layout.yaml + description: Changes the page layout and other settings for printing a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + group: Worksheet + api_set: + ExcelApi: '1.9' +- id: excel-worksheet-reference-worksheets-by-relative-position + name: Reference worksheets by relative position + fileName: reference-worksheets-by-relative-position.yaml + description: Gets a worksheet by using its relative position within the workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + group: Worksheet + api_set: + ExcelApi: '1.5' +- id: excel-worksheet-tab-color + name: Tab color + fileName: tab-color.yaml + description: Gets and sets the tab color of a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml + group: Worksheet + api_set: + ExcelApi: '1.7' +- id: excel-worksheet-visibility + name: Visibility + fileName: worksheet-visibility.yaml + description: Hides and unhides a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml + group: Worksheet + api_set: + ExcelApi: '1.1' +- id: excel-workbook-insert-external-worksheets + name: Insert external worksheets + fileName: workbook-insert-external-worksheets.yaml + description: Inserts worksheets from another workbook into the current workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' +- id: excel-performance-optimization + name: Performance optimization + fileName: performance-optimization.yaml + description: Optimizes performance by untracking ranges and turning off screen painting. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml + group: Scenarios + api_set: + ExcelApi: '1.9' +- id: excel-scenarios-report-generation + name: Report generation + fileName: report-generation.yaml + description: >- + Writes data to the workbook, reads and applies basic formatting, and adds a + chart bound to that data. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml + group: Scenarios + api_set: + ExcelApi: '1.1' +- id: excel-scenarios-multiple-property-set + name: Set multiple properties + fileName: multiple-property-set.yaml + description: Sets multiple properties at once with the API object set() method. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml + group: Scenarios + api_set: + ExcelApi: '1.4' +- id: excel-scenarios-working-with-dates + name: Working with dates + fileName: working-with-dates.yaml + description: >- + Shows how to work with dates by using the Moment JavaScript library with the + Moment-MSDate plug-in. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/working-with-dates.yaml + group: Scenarios + api_set: + ExcelApi: '1.4' +- id: excel-scenarios-currency-converter + name: Currency Converter + fileName: currency-converter.yaml + description: >- + Uses an exchange rate API to convert currency values based on their original + transaction times. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/currency-converter.yaml + group: Scenarios + api_set: + ExcelApi: '1.4' +- id: excel-just-for-fun-patterns + name: Colorful Patterns + fileName: patterns.yaml + description: >- + Uses range formatting to draw interesting pattern. Contributed by Alexander + Zlatkovski. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/patterns.yaml + group: Just For Fun + api_set: + ExcelApi: '1.4' +- id: excel-just-for-fun-gradient + name: Gradient + fileName: gradient.yaml + description: >- + Uses range formatting and external libraries to draw a colorful gradient + within a range. Contributed by Alexander Zlatkovski. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/gradient.yaml + group: Just For Fun + api_set: + ExcelApi: '1.4' +- id: excel-just-for-fun-path-finder-game + name: Path finder + fileName: path-finder-game.yaml + description: >- + Uses range formatting to play a "pathfinder game". Contributed by Alexander + Zlatkovski. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/path-finder-game.yaml + group: Just For Fun + api_set: + ExcelApi: '1.4' +- id: excel-just-for-fun-tetrominos + name: Tetromino stacking + fileName: tetrominos.yaml + description: Arrange moving tetromino shapes to form lines. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/tetrominos.yaml + group: Just For Fun + api_set: + ExcelApi: '1.9' +- id: excel-just-for-fun-color-wheel + name: Wheel of colors + fileName: color-wheel.yaml + description: >- + Uses chart formatting to draw a wheel with changing colors. Contributed by + Alexander Zlatkovski. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/color-wheel.yaml + group: Just For Fun + api_set: + ExcelApi: '1.4' \ No newline at end of file diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml new file mode 100644 index 000000000..e748aee17 --- /dev/null +++ b/playlists-prod/outlook.yaml @@ -0,0 +1,625 @@ +- id: outlook-roaming-settings-roaming-settings + name: Use add-in settings + fileName: roaming-settings.yaml + description: 'Gets, sets, and saves 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 + api_set: + Mailbox: '1.1' +- id: outlook-item-custom-properties-load-set-get-save + name: Work with item custom properties + fileName: load-set-get-save.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + group: Item Custom Properties + api_set: + Mailbox: '1.1' +- id: outlook-item-body-get-selected-data + name: Get selected text (Compose) + fileName: get-selected-data.yaml + description: Gets the selected text in the item body or subject in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml + group: Item Body + api_set: + Mailbox: '1.1' +- id: outlook-item-body-set-selected-data + name: Set selected text (Compose) + fileName: set-selected-data.yaml + description: Replaces the selected text in the item body or subject in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml + group: Item Body + api_set: + Mailbox: '1.1' +- id: outlook-item-save-and-close-close + name: Close the item + fileName: close.yaml + description: Closes the item (compose mode) + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml + group: Item Save And Close + api_set: + Mailbox: '1.3' +- id: outlook-item-save-and-close-save + name: Save the item + fileName: save.yaml + description: Saves the item (compose mode) + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/save.yaml + group: Item Save And Close + api_set: + Mailbox: '1.3' +- id: outlook-recipients-and-attendees-get-from-message-read + name: Get from (Message Read) + fileName: get-from-message-read.yaml + description: Gets who the message is from in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-from-message-compose + name: Get from (Message Compose) + fileName: get-from-message-compose.yaml + description: Gets who the message is from in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.7' +- id: outlook-recipients-and-attendees-get-to-message-read + name: Get to (Message Read) + fileName: get-to-message-read.yaml + description: Gets the To line recipients of the message in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-set-to-message-compose + name: Get and set to (Message Compose) + fileName: get-set-to-message-compose.yaml + description: Gets and sets the To line recipients of the message in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-cc-message-read + name: Get cc (Message Read) + fileName: get-cc-message-read.yaml + description: Gets the Cc line recipients of the message in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-set-cc-message-compose + name: Get and set cc (Message Compose) + fileName: get-set-cc-message-compose.yaml + description: Gets and sets the Cc line recipients of the message in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-set-bcc-message-compose + name: Get and set bcc (Message Compose) + fileName: get-set-bcc-message-compose.yaml + description: Gets and sets the Bcc line recipients of the message in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-sender-message-read + name: Get sender (Message Read) + fileName: get-sender-message-read.yaml + description: Gets the sender in Message Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-required-attendees-appointment-attendee + name: Get required attendees (Appointment Attendee) + fileName: get-required-attendees-appointment-attendee.yaml + description: Gets the required attendees in Appointment Attendee mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: >- + outlook-recipients-and-attendees-get-set-required-attendees-appointment-organizer + name: Get and set required attendees (Appointment Organizer) + fileName: get-set-required-attendees-appointment-organizer.yaml + description: Gets and sets the required attendees in Appointment Organizer mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-optional-attendees-appointment-attendee + name: Get optional attendees (Appointment Attendee) + fileName: get-optional-attendees-appointment-attendee.yaml + description: Gets the optional attendees in Appointment Attendee mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: >- + outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer + name: Get and set optional attendees (Appointment Organizer) + fileName: get-set-optional-attendees-appointment-organizer.yaml + description: Gets and sets the optional attendees in Appointment Organizer mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-organizer-appointment-attendee + name: Get organizer (Appointment Attendee) + fileName: get-organizer-appointment-attendee.yaml + description: Gets the organizer in Appointment Attendee mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.1' +- id: outlook-recipients-and-attendees-get-organizer-appointment-organizer + name: Get organizer (Appointment Organizer) + fileName: get-organizer-appointment-organizer.yaml + description: Gets the organizer in Appointment Organizer mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.7' +- id: outlook-notifications-add-getall-remove + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + group: Notifications + api_set: + Mailbox: '1.3' +- id: outlook-attachments-attachments-compose + name: Manipulate attachments (Item Compose) + fileName: attachments-compose.yaml + description: >- + Adds, gets, and removes attachments from a message or an appointment in + Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + group: Attachments + api_set: + Mailbox: '1.1' +- id: outlook-attachments-get-attachment-content + name: Get attachment content + fileName: get-attachment-content.yaml + description: Gets the attachment content. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + group: Attachments + api_set: + Mailbox: '1.8' +- id: outlook-attachments-get-attachments-read + name: Get attachments (Item Read) + fileName: get-attachments-read.yaml + description: Gets the attachments of a message or an appointment in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml + group: Attachments + api_set: + Mailbox: '1.1' +- 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.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + group: Categories + api_set: + Mailbox: '1.8' +- 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.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml + group: Categories + api_set: + Mailbox: '1.8' +- id: outlook-recurrence-get-series-id + name: Get the series ID + fileName: get-series-id.yaml + description: Gets the series ID. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + group: Recurrence + api_set: + Mailbox: '1.7' +- id: outlook-recurrence-get-recurrence-read + name: Get recurrence (Read) + fileName: get-recurrence-read.yaml + description: Gets the recurrence pattern of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml + group: Recurrence + api_set: + Mailbox: '1.7' +- id: outlook-recurrence-get-set-recurrence-appointment-organizer + name: Get and set recurrence (Appointment Organizer) + fileName: get-set-recurrence-appointment-organizer.yaml + description: Gets and sets the recurrence pattern in Appointment Organizer mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + group: Recurrence + api_set: + Mailbox: '1.7' +- id: outlook-display-items-display-existing-appointment + name: Open an appointment + fileName: display-existing-appointment.yaml + description: Displays existing appointment in a separate window + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- id: outlook-display-items-display-existing-message + name: Open a message + fileName: display-existing-message.yaml + description: Displays an existing message in a separate window + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- id: outlook-display-items-display-new-appointment + name: Create a new appointment + fileName: display-new-appointment.yaml + description: Opens a new appointment form with sample content and a few fields populated. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- id: outlook-display-items-display-new-message + name: Create a new message + fileName: display-new-message.yaml + description: >- + Opens a new message form with a sample content, recipients, and an inline + image attachment + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- id: outlook-display-items-display-reply-forms + name: Create replies + fileName: display-reply-forms.yaml + description: Opens reply and reply-all message forms with sample reply content. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- id: outlook-delegates-and-shared-folders-get-shared-properties + name: Perform an operation as delegate + fileName: get-shared-properties.yaml + description: >- + Gets shared properties for an item, checks delegate permissions and performs + an operation as delegate. + 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 + api_set: + Mailbox: '1.8' +- id: outlook-mime-headers-get-internet-headers-message-read + name: Get internet headers + fileName: get-internet-headers-message-read.yaml + description: Gets internet headers on a message in Read mode. + 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: {} +- 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.' + 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 + 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)' + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml + group: Entities And Regex Matches + api_set: + Mailbox: '1.6' +- id: outlook-tokens-and-service-calls-ids-and-urls + 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. + 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 + api_set: + Mailbox: '1.5' +- 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. + 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 + api_set: + Mailbox: '1.1' +- id: outlook-tokens-and-service-calls-user-callback-token + 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. + 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 + fileName: make-ews-request-async.yaml + description: Gets a message using EWS without any back-end 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 + api_set: + Mailbox: '1.1' +- id: outlook-tokens-and-service-calls-send-message-using-make-ews-request-async + name: Send a message using EWS + fileName: send-message-using-make-ews-request-async.yaml + description: Sends a message using EWS without any back-end 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 + 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 + description: Gets the subject of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-set-subject-compose + name: Get and set the subject (Compose) + fileName: get-set-subject-compose.yaml + description: Gets and sets the subject of an item in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-internet-message-id-read + name: Get the internet message ID (Message Read) + fileName: get-internet-message-id-read.yaml + description: Gets the internet message ID of a message in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-item-class-read + name: Get the item class (Read) + fileName: get-item-class-read.yaml + description: Gets the item class of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-item-type + name: Get the item type + fileName: get-item-type.yaml + description: Gets the item type. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-start-read + name: Get the start date and time (Read) + fileName: get-start-read.yaml + description: Gets the start date and time of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-set-start-appointment-organizer + name: Get and set the start date and time (Appointment Organizer) + fileName: get-set-start-appointment-organizer.yaml + description: Gets and sets the start date and time of an appointment in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-end-read + name: Get the end date and time (Read) + fileName: get-end-read.yaml + description: Gets the end date and time of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-set-end-appointment-organizer + name: Get and set the end date and time (Appointment Organizer) + fileName: get-set-end-appointment-organizer.yaml + description: Gets and sets the end date and time of an appointment in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-location-read + name: Get the location (Read) + fileName: get-location-read.yaml + description: Gets the location of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-set-location-appointment-organizer + name: Get and set the location (Appointment Organizer) + fileName: get-set-location-appointment-organizer.yaml + description: Gets and sets the location of an appointment in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- 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).' + 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 + api_set: + Mailbox: '1.8' +- id: outlook-other-item-apis-get-normalized-subject-read + name: Get the normalized subject (Read) + fileName: get-normalized-subject-read.yaml + description: Gets the normalized subject of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-conversation-id-message + name: Get the conversation ID (Message) + fileName: get-conversation-id-message.yaml + description: Gets the conversation ID of a message. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-date-time-created-read + name: Get the creation date and time (Read) + fileName: get-date-time-created-read.yaml + description: Gets the creation date and time of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- id: outlook-other-item-apis-get-date-time-modified-read + name: Get the last-modified date and time (Read) + fileName: get-date-time-modified-read.yaml + description: Gets the last-modified date and time of an item in Read mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' +- 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. + 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-session-data-apis + name: Work with session data APIs (Compose) + fileName: session-data-apis.yaml + description: 'Set, get, get all, remove, and clear session data in Compose mode.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-work-with-client-signatures + name: Work with client signatures (Compose) + fileName: work-with-client-signatures.yaml + description: >- + Check if the client signature is enabled, disable the client signature, get + the compose type, and set a signature in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + group: Preview APIs + api_set: + Mailbox: preview \ No newline at end of file diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml new file mode 100644 index 000000000..c03e47889 --- /dev/null +++ b/playlists-prod/powerpoint.yaml @@ -0,0 +1,63 @@ +- id: powerpoint-basics-basic-common-api-call + name: Basic API call (Office 2013) + fileName: basic-common-api-call.yaml + description: >- + Executes a basic PowerPoint API call using the "common API" syntax + (compatible with Office 2013). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-common-api-call.yaml + group: Basics + api_set: + Selection: 1.1 +- id: powerpoint-create-presentation + name: Create presentation + fileName: create-presentation.yaml + description: >- + Creates a new, empty presentation and creates a new presentation by copying + an existing one. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/create-presentation.yaml + group: Basics + api_set: + PowerPoint: 1.1 +- 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).' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/get-slide-metadata.yaml + group: Basics + api_set: {} +- id: powerpoint-basics-insert-image + name: Insert Image + fileName: insert-image.yaml + description: Inserts an image to the current slide. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-image.yaml + group: Basics + api_set: {} +- id: powerpoint-basics-insert-svg + name: Insert SVG + fileName: insert-svg.yaml + description: Inserts an SVG image using an XML string. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-svg.yaml + group: Basics + api_set: {} +- id: powerpoint-insert-slides + name: Insert slides from other presentation + fileName: insert-slides.yaml + description: Inserts slides from another PowerPoint file into the current presentation. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/insert-slides.yaml + group: Preview APIs + api_set: + PowerPointApi: '1.2' +- id: powerpoint-scenarios-searches-wikipedia-api + name: Search Wikipedia + fileName: searches-wikipedia-api.yaml + description: Searches Wikipedia based on the selected text in the presentation. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml + group: Scenarios + api_set: {} \ No newline at end of file diff --git a/playlists-prod/project.yaml b/playlists-prod/project.yaml new file mode 100644 index 000000000..ac477f709 --- /dev/null +++ b/playlists-prod/project.yaml @@ -0,0 +1,11 @@ +- id: project-basics-basic-common-api-call + name: Basic API call (Office 2013) + fileName: basic-common-api-call.yaml + description: >- + Executes a basic Project API call using the "common API" syntax (compatible + with Office 2013). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/project/basics/basic-common-api-call.yaml + group: Basics + api_set: + Selection: 1.1 \ No newline at end of file diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml new file mode 100644 index 000000000..57a501ac0 --- /dev/null +++ b/playlists-prod/word.yaml @@ -0,0 +1,193 @@ +- id: word-basics-basic-api-call + name: Basic API call (TypeScript) + fileName: basic-api-call.yaml + description: Performs a basic Word API call using TypeScript. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-api-call.yaml + group: Basics + api_set: + WordApi: '1.1' +- id: word-basics-api-call-es5 + name: Basic API call (JavaScript) + fileName: basic-api-call-es5.yaml + description: Performs a basic Word API call using plain JavaScript & Promises. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-api-call-es5.yaml + group: Basics + api_set: + WordApi: '1.1' +- id: word-basics-basic-common-api-call + name: Basic API call (Office 2013) + fileName: basic-common-api-call.yaml + description: >- + Performs a basic Word API call using JavaScript with the "common API" syntax + (compatible with Office 2013). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-common-api-call.yaml + group: Basics + api_set: + Selection: 1.1 +- 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.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml + group: Content Controls + api_set: + WordApi: '1.1' +- id: word-images-insert-and-get-pictures + name: Use inline pictures + fileName: insert-and-get-pictures.yaml + description: Inserts and gets inline pictures. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + group: Images + api_set: + WordApi: '1.1' +- id: word-lists-insert-list + name: Create a list + fileName: insert-list.yaml + description: Inserts a new list into the document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml + group: Lists + api_set: + WordApi: '1.3' +- id: word-paragraph-get-paragraph-on-insertion-point + name: Get paragraph from insertion point + fileName: get-paragraph-on-insertion-point.yaml + description: Gets the full paragraph containing the insertion point. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + group: Paragraph + api_set: + WordApi: '1.1' +- id: word-paragraph-insert-line-and-page-breaks + name: Insert breaks + fileName: insert-line-and-page-breaks.yaml + description: Inserts page and line breaks in a document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-line-and-page-breaks.yaml + group: Paragraph + api_set: + WordApi: '1.2' +- id: word-paragraph-insert-in-different-locations + name: Insert content at different locations + fileName: insert-in-different-locations.yaml + description: Inserts content at different document locations. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-in-different-locations.yaml + group: Paragraph + api_set: + WordApi: '1.2' +- id: word-paragraph-insert-formatted-text + name: Insert formatted text + fileName: insert-formatted-text.yaml + description: Formats text with pre-built and custom styles. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml + group: Paragraph + api_set: + WordApi: '1.1' +- id: word-paragraph-insert-header-and-footer + name: Insert a header and footer + fileName: insert-header-and-footer.yaml + description: Inserts a header and a footer in the document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml + group: Paragraph + api_set: + WordApi: '1.1' +- id: word-paragraph-paragraph-properties + name: Paragraph properties + fileName: paragraph-properties.yaml + 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 + api_set: + WordApi: '1.2' +- id: word-paragraph-search + name: Search + fileName: search.yaml + description: Shows basic and advanced search capabilities. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + group: Paragraph + api_set: + WordApi: '1.1' +- id: word-paragraph-get-word-count + name: Get word count + fileName: get-word-count.yaml + description: Counts how many times a word or term appears in the document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml + group: Paragraph + api_set: + WordApi: '1.1' +- id: word-properties-get-built-in-properties + name: Built-in document properties + fileName: get-built-in-properties.yaml + description: Gets built-in document properties. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml + group: Properties + api_set: + WordApi: '1.1' +- id: word-properties-read-write-custom-document-properties + name: Custom document properties + fileName: read-write-custom-document-properties.yaml + description: Adds and reads custom document properties of different types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + group: Properties + api_set: + WordApi: '1.3' +- id: word-ranges-scroll-to-range + name: Scroll to a range + fileName: scroll-to-range.yaml + description: Scrolls to a range with and without selection. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/scroll-to-range.yaml + group: Ranges + api_set: + WordApi: '1.2' +- id: word-ranges-split-words-of-first-paragraph + name: Split a paragraph into ranges + fileName: split-words-of-first-paragraph.yaml + description: >- + Splits a paragraph into word ranges and then traverses all the ranges to + format each word, producing a "karaoke" effect. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml + group: Ranges + api_set: + WordApi: '1.3' +- id: word-tables-table-cell-access + name: Create and access a table + fileName: table-cell-access.yaml + description: Creates a table and accesses a specific cell. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + group: Tables + api_set: + WordApi: '1.3' +- id: word-scenarios-doc-assembly + name: Document assembly + fileName: doc-assembly.yaml + description: Composes different parts of a Word document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml + group: Scenarios + api_set: + WordApi: '1.1' +- id: word-scenarios-multiple-property-set + name: Set multiple properties at once + fileName: multiple-property-set.yaml + description: Sets multiple properties at once with the API object set() method. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml + group: Scenarios + api_set: + WordApi: '1.3' \ No newline at end of file diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 6b1018855..7af8440c2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,7 +1,7 @@ 'Excel.Application#decimalSeparator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml + 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"); @@ -29,7 +29,7 @@ 'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/performance-optimization.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -62,7 +62,7 @@ 'Excel.AutoFilter#apply:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-auto-filter.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -75,7 +75,7 @@ 'Excel.Binding#onDataChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/data-changed.yaml + 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"); @@ -90,7 +90,7 @@ 'Excel.CellPropertiesFill#color:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -166,7 +166,7 @@ 'Excel.CellPropertiesFillLoadOptions#color:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -194,7 +194,7 @@ 'Excel.CellPropertiesFont#color:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -270,7 +270,7 @@ 'Excel.CellPropertiesFontLoadOptions#color:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -298,7 +298,7 @@ 'Excel.CellPropertiesLoadOptions#address:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -326,7 +326,7 @@ 'Excel.CellValueConditionalFormat#format:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -341,7 +341,7 @@ 'Excel.CellValueConditionalFormat#rule:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -356,7 +356,7 @@ 'Excel.ChartAxis#displayUnit:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-axis.yaml + 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"); @@ -375,7 +375,7 @@ 'Excel.ChartAxis#showDisplayUnitLabel:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-axis.yaml + 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"); @@ -390,7 +390,7 @@ 'Excel.ChartFill#setSolidColor:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-point.yaml + 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"); @@ -406,7 +406,7 @@ 'Excel.ChartLegendFormat#font:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-legend.yaml + 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"); @@ -428,7 +428,7 @@ 'Excel.ChartSeries#setBubbleSizes:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-bubble-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml await Excel.run(async (context) => { /* @@ -477,7 +477,7 @@ 'Excel.ChartSeries#getDimensionValues:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-bubble-chart.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"); @@ -502,7 +502,7 @@ 'Excel.ChartSeries#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series.yaml + 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"); @@ -522,7 +522,7 @@ 'Excel.ChartSeries#setValues:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series.yaml + 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"); @@ -541,7 +541,7 @@ 'Excel.ChartSeries#markerBackgroundColor:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-markers.yaml + 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"); @@ -573,7 +573,7 @@ 'Excel.ChartSeries#markerForegroundColor:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-markers.yaml + 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"); @@ -605,7 +605,7 @@ 'Excel.ChartSeries#markerSize:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-markers.yaml + 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"); @@ -637,7 +637,7 @@ 'Excel.ChartSeries#markerStyle:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-markers.yaml + 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"); @@ -669,7 +669,7 @@ 'Excel.ChartTitle#getSubstring:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-title-format.yaml + 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"); @@ -682,7 +682,7 @@ 'Excel.ChartTitle#textOrientation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-title-format.yaml + 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"); @@ -694,7 +694,7 @@ 'Excel.ChartTrendline#type:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + 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"); @@ -712,7 +712,7 @@ 'Excel.ChartTrendlineCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + 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"); @@ -727,7 +727,7 @@ 'Excel.ChartTrendlineFormat#line:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + 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"); @@ -745,7 +745,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + 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"); @@ -764,7 +764,7 @@ 'Excel.ColorScaleConditionalFormat#criteria:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -783,7 +783,7 @@ 'Excel.Comment#content:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-basics.yaml + 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"); @@ -794,7 +794,7 @@ 'Excel.Comment#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-basics.yaml + 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(); @@ -803,7 +803,7 @@ 'Excel.Comment#load:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-basics.yaml + 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"); @@ -816,7 +816,7 @@ 'Excel.Comment#resolved:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-resolution.yaml + 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"); @@ -826,7 +826,7 @@ 'Excel.CommentCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-basics.yaml + 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"); @@ -838,7 +838,7 @@ 'Excel.CommentCollection#onAdded:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml + 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; @@ -854,7 +854,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml async function commentAdded(event: Excel.CommentAddedEventArgs) { await Excel.run(async (context) => { @@ -878,7 +878,7 @@ 'Excel.CommentCollection#onChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml + 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; @@ -894,7 +894,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml async function commentChanged(event: Excel.CommentChangedEventArgs) { await Excel.run(async (context) => { @@ -918,7 +918,7 @@ 'Excel.CommentCollection#onDeleted:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml + 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; @@ -934,7 +934,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml async function commentDeleted(event: Excel.CommentDeletedEventArgs) { await Excel.run(async (context) => { @@ -947,7 +947,7 @@ 'Excel.CommentReply#content:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-replies.yaml + 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"); @@ -964,7 +964,7 @@ 'Excel.CommentReply#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-replies.yaml + 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. @@ -976,7 +976,7 @@ 'Excel.CommentReplyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-replies.yaml + 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. @@ -988,7 +988,7 @@ 'Excel.CommentRichContent#mentions:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-mentions.yaml + 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"); @@ -1012,7 +1012,7 @@ 'Excel.ConditionalCellValueRule#formula1:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1027,7 +1027,7 @@ 'Excel.ConditionalCellValueRule#operator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1042,7 +1042,7 @@ 'Excel.ConditionalFormat#cellValue:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1057,7 +1057,7 @@ 'Excel.ConditionalFormat#colorScale:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1076,7 +1076,7 @@ 'Excel.ConditionalFormat#custom:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1090,7 +1090,7 @@ 'Excel.ConditionalFormat#dataBar:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1104,7 +1104,7 @@ 'Excel.ConditionalFormat#getRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1134,7 +1134,7 @@ 'Excel.ConditionalFormat#iconSet:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1177,7 +1177,7 @@ 'Excel.ConditionalFormat#preset:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1192,7 +1192,7 @@ 'Excel.ConditionalFormat#textComparison:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1207,7 +1207,7 @@ 'Excel.ConditionalFormat#type:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1237,7 +1237,7 @@ 'Excel.ConditionalFormatCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1256,7 +1256,7 @@ 'Excel.ConditionalFormatCollection#clearAll:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1270,7 +1270,7 @@ 'Excel.ConditionalFormatCollection#getItemAt:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1300,7 +1300,7 @@ 'Excel.ConditionalFormatRule#formula:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1314,7 +1314,7 @@ 'Excel.ConditionalIconCriterion#formula:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1357,7 +1357,7 @@ 'Excel.ConditionalIconCriterion#operator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1399,7 +1399,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1414,7 +1414,7 @@ 'Excel.ConditionalIconCriterion#type:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1457,7 +1457,7 @@ 'Excel.ConditionalPresetCriteriaRule#criterion:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1472,7 +1472,7 @@ 'Excel.ConditionalTextComparisonRule#text:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1487,7 +1487,7 @@ 'Excel.CultureInfo#datetimeFormat:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info-date-time.yaml + 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([ @@ -1527,7 +1527,7 @@ 'Excel.CustomConditionalFormat#format:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1541,7 +1541,7 @@ 'Excel.CustomPropertyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml + 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. @@ -1559,7 +1559,7 @@ 'Excel.CustomXmlPart#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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; @@ -1591,7 +1591,7 @@ 'Excel.CustomXmlPart#getXml:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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 @@ -1615,7 +1615,7 @@ 'Excel.CustomXmlPart#id:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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 @@ -1639,7 +1639,7 @@ 'Excel.CustomXmlPart#setXml:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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; @@ -1663,7 +1663,7 @@ 'Excel.CustomXmlPartCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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 @@ -1687,7 +1687,7 @@ 'Excel.CustomXmlPartCollection#getItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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; @@ -1711,7 +1711,7 @@ 'Excel.CustomXmlPartCollection#getByNamespace:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.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) => { $("#display-xml").text(""); @@ -1743,7 +1743,7 @@ 'Excel.CustomXmlPartScopedCollection#getItemOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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; @@ -1775,7 +1775,7 @@ 'Excel.CustomXmlPartScopedCollection#getCount:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.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) => { $("#display-xml").text(""); @@ -1807,7 +1807,7 @@ 'Excel.CustomXmlPartScopedCollection#getOnlyItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.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) => { $("#display-xml").text(""); @@ -1839,7 +1839,7 @@ 'Excel.DataBarConditionalFormat#barDirection:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -1853,7 +1853,7 @@ 'Excel.DataPivotHierarchy#showAs:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-calculations.yaml + 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"); @@ -1879,7 +1879,7 @@ 'Excel.DataPivotHierarchy#name:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + 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 @@ -1893,7 +1893,7 @@ 'Excel.DataValidation#prompt:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/22-data-validation/data-validation.yaml + 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"); @@ -1929,7 +1929,7 @@ 'Excel.DataValidation#rule:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/22-data-validation/data-validation.yaml + 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"); @@ -1955,7 +1955,7 @@ 'Excel.DataValidation#errorAlert:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/22-data-validation/data-validation.yaml + 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"); @@ -1987,7 +1987,7 @@ 'Excel.DataValidationRule#list:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/22-data-validation/data-validation.yaml + 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"); @@ -2013,7 +2013,7 @@ 'Excel.DataValidationRule#wholeNumber:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/22-data-validation/data-validation.yaml + 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"); @@ -2049,7 +2049,7 @@ 'Excel.DocumentProperties#custom:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml + 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. @@ -2066,7 +2066,7 @@ 'Excel.IconSetConditionalFormat#criteria:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -2109,7 +2109,7 @@ 'Excel.IconSetConditionalFormat#style:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -2152,7 +2152,7 @@ 'Excel.Image#format:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.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"); @@ -2166,7 +2166,7 @@ 'Excel.Line#connectBeginShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml + 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; @@ -2178,7 +2178,7 @@ 'Excel.Line#connectEndShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml + 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; @@ -2190,7 +2190,7 @@ 'Excel.Line#disconnectBeginShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml + 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; @@ -2202,7 +2202,7 @@ 'Excel.Line#disconnectEndShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml + 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; @@ -2214,7 +2214,7 @@ 'Excel.NamedItem#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/create-and-remove-named-item.yaml + 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"); @@ -2236,7 +2236,7 @@ 'Excel.NamedItem#formula:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/update-named-item.yaml + 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"); @@ -2260,7 +2260,7 @@ 'Excel.NamedItemCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/create-and-remove-named-item.yaml + 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"); @@ -2274,7 +2274,7 @@ 'Excel.NumberFormatInfo#numberDecimalSeparator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml + 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" @@ -2315,7 +2315,7 @@ 'Excel.NumberFormatInfo#numberGroupSeparator:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml + 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" @@ -2340,7 +2340,7 @@ 'Excel.PageBreakCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + 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"); @@ -2350,7 +2350,7 @@ 'Excel.PageLayout#centerHorizontally:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + 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"); @@ -2361,7 +2361,7 @@ 'Excel.PageLayout#centerVertically:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + 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"); @@ -2372,7 +2372,7 @@ 'Excel.PageLayout#orientation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + 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"); @@ -2382,7 +2382,7 @@ 'Excel.PageLayout#setPrintArea:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + 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"); @@ -2392,7 +2392,7 @@ 'Excel.PageLayout#setPrintTitleRows:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + 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"); @@ -2402,7 +2402,7 @@ 'Excel.PageLayout#zoom:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + 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"); @@ -2412,7 +2412,7 @@ 'Excel.PivotField#clearAllFilters:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + 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. @@ -2431,7 +2431,7 @@ 'Excel.PivotFilters#dateFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + 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. @@ -2463,7 +2463,7 @@ 'Excel.PivotFilters#labelFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + 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. @@ -2489,7 +2489,7 @@ 'Excel.PivotFilters#manualFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + 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. @@ -2515,7 +2515,7 @@ 'Excel.PivotFilters#valueFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + 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. @@ -2541,7 +2541,7 @@ 'Excel.PivotHierarchy#fields:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + 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. @@ -2567,7 +2567,7 @@ 'Excel.PivotLayout#getDataBodyRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-filters-and-summaries.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"); @@ -2588,7 +2588,7 @@ 'Excel.PivotTable#columnHierarchies:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + 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"); @@ -2610,7 +2610,7 @@ 'Excel.PivotTable#dataHierarchies:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + 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"); @@ -2622,7 +2622,7 @@ 'Excel.PivotTable#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + 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(); @@ -2632,7 +2632,7 @@ 'Excel.PivotTable#layout:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + 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"); @@ -2653,7 +2653,7 @@ 'Excel.PivotTable#filterHierarchies:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + 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) => { @@ -2673,7 +2673,7 @@ 'Excel.PivotTableCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + 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"); @@ -2685,7 +2685,7 @@ 'Excel.PresetCriteriaConditionalFormat#rule:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -2699,7 +2699,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -2713,7 +2713,7 @@ 'Excel.Range#getDirectPrecedents:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. @@ -2736,7 +2736,7 @@ 'Excel.Range#sort:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-column-and-row-sort.yaml + 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) => { @@ -2765,7 +2765,7 @@ 'Excel.Range#group:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + 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(); @@ -2783,7 +2783,7 @@ 'Excel.Range#ungroup:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + 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(); @@ -2799,7 +2799,7 @@ 'Excel.Range#getPivotTables:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + 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(); @@ -2826,7 +2826,7 @@ 'Excel.Range#getSpecialCells:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { @@ -2842,7 +2842,7 @@ 'Excel.Range#autoFill:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-auto-fill.yaml + 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(); @@ -2856,7 +2856,7 @@ 'Excel.Range#setCellProperties:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -2932,7 +2932,7 @@ 'Excel.Range#getCellProperties:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -2960,7 +2960,7 @@ 'Excel.Range#copyFrom:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-copyfrom.yaml + 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"); @@ -2975,7 +2975,7 @@ 'Excel.Range#moveTo:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-copyfrom.yaml + 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"); @@ -2989,7 +2989,7 @@ 'Excel.Range#getSpillingToRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/dynamic-arrays.yaml + 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"); @@ -3011,7 +3011,7 @@ 'Excel.Range#find:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-find.yaml + 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"); @@ -3035,7 +3035,7 @@ 'Excel.Range#findOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-find.yaml + 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"); @@ -3059,7 +3059,7 @@ 'Excel.Range#hyperlink:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.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"); @@ -3088,7 +3088,7 @@ 'Excel.Range#getIntersectionOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-relationships.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.getItem("Sample"); @@ -3147,7 +3147,7 @@ 'Excel.Range#getUsedRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-relationships.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.getItem("Sample"); @@ -3206,7 +3206,7 @@ 'Excel.Range#removeDuplicates:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-remove-duplicates.yaml + 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"); @@ -3222,7 +3222,7 @@ 'Excel.Range#style:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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"); @@ -3238,7 +3238,7 @@ 'Excel.Range#getUsedRangeOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/used-range.yaml + 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"); @@ -3275,7 +3275,7 @@ 'Excel.Range#set:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/multiple-property-set.yaml + 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"); @@ -3297,7 +3297,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/multiple-property-set.yaml + 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"); @@ -3316,7 +3316,7 @@ 'Excel.RangeAreas#format:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { @@ -3332,7 +3332,7 @@ 'Excel.RangeFormat#textOrientation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-text-orientation.yaml + 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"); @@ -3347,7 +3347,7 @@ 'Excel.RangeHyperlink#address:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.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"); @@ -3376,7 +3376,7 @@ 'Excel.RangeHyperlink#documentReference:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.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"); @@ -3405,7 +3405,7 @@ 'Excel.RangeHyperlink#screenTip:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.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"); @@ -3434,7 +3434,7 @@ 'Excel.RangeHyperlink#textToDisplay:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.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"); @@ -3463,7 +3463,7 @@ 'Excel.RemoveDuplicatesResult#uniqueRemaining:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-remove-duplicates.yaml + 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"); @@ -3479,7 +3479,7 @@ 'Excel.Runtime#enableEvents:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-disable-events.yaml + 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"); @@ -3499,7 +3499,7 @@ 'Excel.SettableCellProperties#style:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + 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(); @@ -3575,7 +3575,7 @@ 'Excel.Setting#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/create-get-change-delete-settings.yaml + 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; @@ -3596,7 +3596,7 @@ 'Excel.SettingCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + 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; @@ -3608,7 +3608,7 @@ 'Excel.SettingCollection#onSettingsChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + 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; @@ -3620,7 +3620,7 @@ 'Excel.SettingCollection#getItemOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/create-get-change-delete-settings.yaml + 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; @@ -3641,7 +3641,7 @@ 'Excel.Shape#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-create-and-delete.yaml + 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(); @@ -3659,7 +3659,7 @@ 'Excel.Shape#fill:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-create-and-delete.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"); @@ -3674,7 +3674,7 @@ 'Excel.Shape#rotation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-create-and-delete.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"); @@ -3690,7 +3690,7 @@ 'Excel.Shape#group:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-groups.yaml + 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"); @@ -3704,7 +3704,7 @@ 'Excel.Shape#getAsImage:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.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"); @@ -3719,7 +3719,7 @@ 'Excel.Shape#incrementRotation:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.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"); @@ -3730,7 +3730,7 @@ 'Excel.Shape#line:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml + 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; @@ -3748,7 +3748,7 @@ 'Excel.Shape#incrementLeft:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-move-and-order.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"); @@ -3759,7 +3759,7 @@ 'Excel.Shape#incrementTop:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-move-and-order.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"); @@ -3770,7 +3770,7 @@ 'Excel.Shape#scaleHeight:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-move-and-order.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"); @@ -3782,7 +3782,7 @@ 'Excel.Shape#lockAspectRatio:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-move-and-order.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"); @@ -3794,7 +3794,7 @@ 'Excel.Shape#setZOrder:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-move-and-order.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"); @@ -3805,7 +3805,7 @@ 'Excel.ShapeCollection#addGeometricShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-create-and-delete.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"); @@ -3819,7 +3819,7 @@ 'Excel.ShapeCollection#addGroup:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-groups.yaml + 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"); @@ -3836,7 +3836,7 @@ 'Excel.ShapeCollection#addImage:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml const myFile = document.getElementById("selectedFile"); @@ -3861,7 +3861,7 @@ 'Excel.ShapeCollection#addLine:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml + 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; @@ -3872,7 +3872,7 @@ 'Excel.ShapeCollection#addTextBox:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-textboxes.yaml + 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; @@ -3887,7 +3887,7 @@ 'Excel.ShapeGroup#ungroup:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-groups.yaml + 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"); @@ -3901,7 +3901,7 @@ 'Excel.ShowAsRule#baseItem:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-calculations.yaml + 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"); @@ -3930,7 +3930,7 @@ 'Excel.Slicer#style:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + 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"); @@ -3940,7 +3940,7 @@ 'Excel.Slicer#selectItems:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + 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"); @@ -3950,7 +3950,7 @@ 'Excel.Slicer#clearFilters:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + 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"); @@ -3960,7 +3960,7 @@ 'Excel.Slicer#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.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(); @@ -3970,7 +3970,7 @@ 'Excel.SlicerCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.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.getItem("Pivot"); @@ -3984,7 +3984,7 @@ 'Excel.SlicerCollection#getItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + 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"); @@ -3998,7 +3998,7 @@ 'Excel.Style#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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"); @@ -4014,7 +4014,7 @@ 'Excel.Style#font:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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"); @@ -4033,7 +4033,7 @@ 'Excel.Style#horizontalAlignment:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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"); @@ -4049,7 +4049,7 @@ 'Excel.Style#load:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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"); @@ -4069,7 +4069,7 @@ 'Excel.StyleCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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; @@ -4094,7 +4094,7 @@ 'Excel.StyleCollection#getItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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; @@ -4119,7 +4119,7 @@ 'Excel.Table#onChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-table-changed.yaml + 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); @@ -4131,7 +4131,7 @@ 'Excel.Table#onSelectionChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-table-changed.yaml + 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); @@ -4143,7 +4143,7 @@ 'Excel.TableChangedEventArgs#details:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/data-change-event-details.yaml + 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) => { @@ -4157,7 +4157,7 @@ 'Excel.TableChangedEventArgs#tableId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-tablecollection-changed.yaml + 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) => { @@ -4175,7 +4175,7 @@ 'Excel.TableChangedEventArgs#worksheetId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-tablecollection-changed.yaml + 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) => { @@ -4193,7 +4193,7 @@ 'Excel.TableCollection#onChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-tablecollection-changed.yaml + 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; @@ -4205,7 +4205,7 @@ 'Excel.TableSelectionChangedEventArgs#address:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-table-changed.yaml + 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) => { @@ -4215,7 +4215,7 @@ 'Excel.TextConditionalFormat#format:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -4230,7 +4230,7 @@ 'Excel.TextConditionalFormat#rule:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.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 sheet = context.workbook.worksheets.getItem("Sample"); @@ -4245,7 +4245,7 @@ 'Excel.TextFrame#deleteText:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-textboxes.yaml + 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; @@ -4256,7 +4256,7 @@ 'Excel.Workbook#properties:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/properties.yaml + 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"; @@ -4285,7 +4285,7 @@ 'Excel.Workbook#pivotTables:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + 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. @@ -4302,7 +4302,7 @@ 'Excel.Workbook#getSelectedRanges:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { @@ -4314,7 +4314,7 @@ 'Excel.Workbook#styles:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + 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; @@ -4339,7 +4339,7 @@ 'Excel.Workbook#getActiveCell:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-get-active-cell.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml await Excel.run(async (context) => { @@ -4354,7 +4354,7 @@ 'Excel.Workbook#close:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-save-and-close.yaml + 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); @@ -4362,7 +4362,7 @@ 'Excel.Workbook#save:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-save-and-close.yaml + 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); @@ -4370,7 +4370,7 @@ 'Excel.WorkbookProtection#protect:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { let workbook = context.workbook; @@ -4384,7 +4384,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml let password = await passwordHandler(); @@ -4403,7 +4403,7 @@ 'Excel.WorkbookProtection#unprotect:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { let workbook = context.workbook; @@ -4411,7 +4411,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml let password = await passwordHandler(); @@ -4424,7 +4424,7 @@ 'Excel.WorkbookRangeAreas#areas:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml await Excel.run(async (context) => { // Precedents are cells referenced by the formula in a cell. @@ -4447,7 +4447,7 @@ 'Excel.Worksheet#customProperties:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml + 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. @@ -4464,7 +4464,7 @@ 'Excel.Worksheet#onRowSorted:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-column-and-row-sort.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 row handler"); @@ -4489,7 +4489,7 @@ 'Excel.Worksheet#onColumnSorted:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-column-and-row-sort.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"); @@ -4514,7 +4514,7 @@ 'Excel.Worksheet#onChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-worksheet.yaml + 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"); @@ -4526,7 +4526,7 @@ 'Excel.Worksheet#onSingleClicked:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-worksheet-single-click.yaml + 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(); @@ -4544,7 +4544,7 @@ 'Excel.Worksheet#showOutlineLevels:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + 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(); @@ -4555,7 +4555,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + 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(); @@ -4567,7 +4567,7 @@ 'Excel.Worksheet#pivotTables:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + 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. @@ -4584,7 +4584,7 @@ 'Excel.Worksheet#slicers:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.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.getItem("Pivot"); @@ -4598,7 +4598,7 @@ 'Excel.Worksheet#getRanges:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { @@ -4611,7 +4611,7 @@ 'Excel.Worksheet#autoFilter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-auto-filter.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -4624,7 +4624,7 @@ 'Excel.Worksheet#copy:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-copy.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml await Excel.run(async (context) => { @@ -4642,7 +4642,7 @@ 'Excel.Worksheet#findAllOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-find-all.yaml + 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"); @@ -4662,7 +4662,7 @@ 'Excel.Worksheet#showGridlines:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/gridlines.yaml + 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(); @@ -4673,7 +4673,7 @@ 'Excel.Worksheet#getNext:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.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 sheets = context.workbook.worksheets; @@ -4702,7 +4702,7 @@ 'Excel.Worksheet#getPrevious:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.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 sheets = context.workbook.worksheets; @@ -4727,7 +4727,7 @@ 'Excel.Worksheet#tabColor:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/tab-color.yaml + 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(); @@ -4738,7 +4738,7 @@ 'Excel.WorksheetAddedEventArgs#worksheetId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + 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) => { @@ -4751,7 +4751,7 @@ 'Excel.WorksheetCollection#onActivated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + 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; @@ -4763,7 +4763,7 @@ 'Excel.WorksheetCollection#onAdded:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + 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; @@ -4775,7 +4775,7 @@ 'Excel.WorksheetCollection#onDeactivated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + 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; @@ -4787,7 +4787,7 @@ 'Excel.WorksheetCollection#addFromBase64:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml const myFile = document.getElementById("file"); @@ -4817,7 +4817,7 @@ 'Excel.WorksheetCollection#getFirst:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.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 sheets = context.workbook.worksheets; @@ -4846,7 +4846,7 @@ 'Excel.WorksheetCollection#getLast:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.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 sheets = context.workbook.worksheets; @@ -4875,7 +4875,7 @@ 'Excel.WorksheetCustomPropertyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml + 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. @@ -4893,7 +4893,7 @@ 'Excel.WorksheetFreezePanes#freezeAt:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + 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"); @@ -4906,7 +4906,7 @@ 'Excel.WorksheetFreezePanes#freezeColumns:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + 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"); @@ -4919,7 +4919,7 @@ 'Excel.WorksheetFreezePanes#freezeRows:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + 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"); @@ -4932,7 +4932,7 @@ 'Excel.WorksheetFreezePanes#getLocationOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + 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"); @@ -4950,7 +4950,7 @@ 'Excel.WorksheetFreezePanes#unfreeze:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + 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"); @@ -4961,7 +4961,7 @@ 'Excel.WorksheetProtection#protect:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -4975,7 +4975,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml let password = await passwordHandler(); @@ -4994,7 +4994,7 @@ 'Excel.WorksheetProtection#unprotect:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml await Excel.run(async (context) => { let activeSheet = context.workbook.worksheets.getActiveWorksheet(); @@ -5002,7 +5002,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml let password = await passwordHandler(); @@ -5015,7 +5015,7 @@ 'Excel.WorksheetSingleClickedEventArgs#address:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-worksheet-single-click.yaml + 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(); @@ -5033,7 +5033,7 @@ 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/10-roaming-settings/roaming-settings.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml var settingName = $("#settingName").val(); @@ -5045,7 +5045,7 @@ 'Office.RoamingSettings#set:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/10-roaming-settings/roaming-settings.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml var settingName = $("#settingName").val(); @@ -5057,7 +5057,7 @@ 'Office.RoamingSettings#saveAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/10-roaming-settings/roaming-settings.yaml + 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. @@ -5071,7 +5071,7 @@ 'Office.CustomProperties#get:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml var propertyName = $("#propertyName").val(); @@ -5084,7 +5084,7 @@ 'Office.CustomProperties#set:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml var propertyName = $("#propertyName").val(); @@ -5097,7 +5097,7 @@ 'Office.CustomProperties#remove:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml var propertyName = $("#propertyName").val(); @@ -5107,7 +5107,7 @@ 'Office.AppointmentCompose#loadCustomPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + 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) { @@ -5128,7 +5128,7 @@ 'Office.AppointmentRead#loadCustomPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + 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) { @@ -5149,7 +5149,7 @@ 'Office.MessageCompose#loadCustomPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + 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) { @@ -5170,7 +5170,7 @@ 'Office.MessageRead#loadCustomPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + 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) { @@ -5191,7 +5191,7 @@ 'Office.AppointmentCompose#getSelectedDataAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/get-selected-data.yaml + 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) { @@ -5206,7 +5206,7 @@ 'Office.MessageCompose#getSelectedDataAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/get-selected-data.yaml + 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) { @@ -5221,7 +5221,7 @@ 'Office.AppointmentCompose#setSelectedDataAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { @@ -5234,7 +5234,7 @@ 'Office.MessageCompose#setSelectedDataAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml Office.context.mailbox.item.setSelectedDataAsync("Replaced", function(asyncResult) { @@ -5247,19 +5247,19 @@ 'Office.AppointmentCompose#close:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/25-item-save-and-close/close.yaml + 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#close:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/25-item-save-and-close/close.yaml + 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#saveAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/25-item-save-and-close/save.yaml + 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) { @@ -5272,7 +5272,7 @@ 'Office.MessageCompose#bcc:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + 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) { @@ -5287,7 +5287,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml var email = $("#emailBcc") .val() @@ -5304,7 +5304,7 @@ 'Office.Recipients#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + 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) { @@ -5319,7 +5319,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + 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) { @@ -5334,7 +5334,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + 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) { @@ -5356,7 +5356,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + 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) { @@ -5378,7 +5378,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + 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) { @@ -5394,7 +5394,7 @@ 'Office.Recipients#setAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml var email = $("#emailBcc") .val() @@ -5410,7 +5410,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml var email = $("#emailCc") .val() @@ -5426,7 +5426,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml var email = $("#emailOptional") .val() @@ -5443,7 +5443,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml var email = $("#emailRequired") .val() @@ -5460,7 +5460,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml var email = $("#emailTo") .val() @@ -5477,7 +5477,7 @@ 'Office.MessageCompose#cc:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + 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) { @@ -5492,7 +5492,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml var email = $("#emailCc") .val() @@ -5509,7 +5509,7 @@ 'Office.MessageRead#cc:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml var msgCc = Office.context.mailbox.item.cc; @@ -5521,7 +5521,7 @@ 'Office.MessageCompose#from:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml + 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) { @@ -5534,7 +5534,7 @@ 'Office.From#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml + 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) { @@ -5547,7 +5547,7 @@ 'Office.MessageRead#from:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml var msgFrom = Office.context.mailbox.item.from; @@ -5556,7 +5556,7 @@ 'Office.AppointmentRead#optionalAttendees:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml var apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; @@ -5574,7 +5574,7 @@ 'Office.AppointmentCompose#optionalAttendees:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + 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) { @@ -5596,7 +5596,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml var email = $("#emailOptional") .val() @@ -5614,7 +5614,7 @@ 'Office.AppointmentRead#organizer:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml var apptOrganizer = Office.context.mailbox.item.organizer; @@ -5623,7 +5623,7 @@ 'Office.AppointmentCompose#organizer:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml + 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) { @@ -5636,7 +5636,7 @@ 'Office.Organizer#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml + 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) { @@ -5649,7 +5649,7 @@ 'Office.AppointmentRead#requiredAttendees:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml var apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; @@ -5667,7 +5667,7 @@ 'Office.AppointmentCompose#requiredAttendees:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + 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) { @@ -5689,7 +5689,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml var email = $("#emailRequired") .val() @@ -5707,7 +5707,7 @@ 'Office.MessageRead#sender:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml var msgSender = Office.context.mailbox.item.sender; @@ -5716,7 +5716,7 @@ 'Office.MessageCompose#to:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + 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) { @@ -5731,7 +5731,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml var email = $("#emailTo") .val() @@ -5748,7 +5748,7 @@ 'Office.MessageRead#to:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml var msgTo = Office.context.mailbox.item.to; @@ -5760,7 +5760,7 @@ 'Office.AppointmentCompose#notificationMessages:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5773,7 +5773,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5788,7 +5788,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5803,12 +5803,12 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5823,7 +5823,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5832,7 +5832,7 @@ 'Office.AppointmentRead#notificationMessages:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5845,7 +5845,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5860,7 +5860,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5875,12 +5875,12 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5895,7 +5895,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5904,7 +5904,7 @@ 'Office.MessageCompose#notificationMessages:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5917,7 +5917,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5932,7 +5932,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5947,12 +5947,12 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5967,7 +5967,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5976,7 +5976,7 @@ 'Office.MessageRead#notificationMessages:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -5989,7 +5989,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6004,7 +6004,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6019,12 +6019,12 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6039,7 +6039,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6048,7 +6048,7 @@ 'Office.NotificationMessages#addAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6061,7 +6061,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6076,7 +6076,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6091,7 +6091,7 @@ handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6105,13 +6105,13 @@ 'Office.NotificationMessages#getAllAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); 'Office.NotificationMessages#replaceAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6127,7 +6127,7 @@ 'Office.NotificationMessages#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml var id = $("#notificationId").val(); @@ -6136,7 +6136,7 @@ 'Office.AppointmentCompose#addFileAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml var attachmentUrl = $("#attachmentUrl").val(); @@ -6148,7 +6148,7 @@ 'Office.MessageCompose#addFileAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml var attachmentUrl = $("#attachmentUrl").val(); @@ -6160,7 +6160,7 @@ 'Office.AppointmentCompose#addItemAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml var attachmentItemId = $("#attachmentItemId").val(); @@ -6172,7 +6172,7 @@ 'Office.MessageCompose#addItemAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml var attachmentItemId = $("#attachmentItemId").val(); @@ -6184,7 +6184,7 @@ 'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + 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="; @@ -6196,7 +6196,7 @@ function(result) { console.log(result); }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Set the signature for the current item with inline image. @@ -6227,7 +6227,7 @@ 'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + 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="; @@ -6239,7 +6239,7 @@ function(result) { console.log(result); }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Set the signature for the current item with inline image. @@ -6270,7 +6270,7 @@ 'Office.AppointmentCompose#getAttachmentsAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + 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) { @@ -6290,7 +6290,7 @@ 'Office.MessageCompose#getAttachmentsAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + 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) { @@ -6310,7 +6310,7 @@ 'Office.AppointmentCompose#removeAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), @@ -6327,7 +6327,7 @@ 'Office.MessageCompose#removeAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml Office.context.mailbox.item.removeAttachmentAsync( $("#attachmentId").val(), @@ -6344,7 +6344,7 @@ 'Office.AppointmentCompose#getAttachmentContentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml var item = Office.context.mailbox.item; @@ -6388,7 +6388,7 @@ 'Office.AppointmentRead#getAttachmentContentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml var item = Office.context.mailbox.item; @@ -6432,7 +6432,7 @@ 'Office.MessageCompose#getAttachmentContentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml var item = Office.context.mailbox.item; @@ -6476,7 +6476,7 @@ 'Office.MessageRead#getAttachmentContentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml var item = Office.context.mailbox.item; @@ -6520,7 +6520,7 @@ 'Office.AppointmentRead#attachments:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachments-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml var attachments = Office.context.mailbox.item.attachments; @@ -6528,7 +6528,7 @@ 'Office.MessageRead#attachments:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachments-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml var attachments = Office.context.mailbox.item.attachments; @@ -6536,7 +6536,7 @@ 'Office.AppointmentCompose#categories:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6553,7 +6553,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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, @@ -6582,7 +6582,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6607,7 +6607,7 @@ 'Office.AppointmentRead#categories:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6624,7 +6624,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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, @@ -6653,7 +6653,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6678,7 +6678,7 @@ 'Office.MessageCompose#categories:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6695,7 +6695,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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, @@ -6724,7 +6724,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6749,7 +6749,7 @@ 'Office.MessageRead#categories:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6766,7 +6766,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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, @@ -6795,7 +6795,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6820,7 +6820,7 @@ 'Office.Categories#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6838,7 +6838,7 @@ 'Office.Categories#addAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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, @@ -6868,7 +6868,7 @@ 'Office.Categories#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + 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) { @@ -6893,7 +6893,7 @@ 'Office.Mailbox#masterCategories:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + 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) { @@ -6910,7 +6910,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml var masterCategoriesToAdd = [ { @@ -6930,7 +6930,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml var masterCategoriesToRemove = ["TestCategory"]; @@ -6946,7 +6946,7 @@ 'Office.MasterCategories#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + 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) { @@ -6964,7 +6964,7 @@ 'Office.MasterCategories#addAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml var masterCategoriesToAdd = [ { @@ -6985,7 +6985,7 @@ 'Office.MasterCategories#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml var masterCategoriesToRemove = ["TestCategory"]; @@ -7001,7 +7001,7 @@ 'Office.AppointmentCompose#recurrence:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + 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) { @@ -7017,7 +7017,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + 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. @@ -7069,7 +7069,7 @@ 'Office.Recurrence#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + 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) { @@ -7086,7 +7086,7 @@ 'Office.Recurrence#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + 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. @@ -7138,7 +7138,7 @@ 'Office.AppointmentRead#recurrence:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-recurrence-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml var recurrence = Office.context.mailbox.item.recurrence; @@ -7153,7 +7153,7 @@ 'Office.MessageRead#recurrence:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-recurrence-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml var recurrence = Office.context.mailbox.item.recurrence; @@ -7168,7 +7168,7 @@ 'Office.AppointmentCompose#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml var seriesId = Office.context.mailbox.item.seriesId; @@ -7183,7 +7183,7 @@ 'Office.AppointmentRead#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml var seriesId = Office.context.mailbox.item.seriesId; @@ -7198,7 +7198,7 @@ 'Office.MessageCompose#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml var seriesId = Office.context.mailbox.item.seriesId; @@ -7213,7 +7213,7 @@ 'Office.MessageRead#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml var seriesId = Office.context.mailbox.item.seriesId; @@ -7228,7 +7228,7 @@ 'Office.Mailbox#displayAppointmentForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml var itemId = $("#itemId").val(); @@ -7236,7 +7236,7 @@ 'Office.Mailbox#displayMessageForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml var itemId = $("#itemId").val(); @@ -7244,7 +7244,7 @@ 'Office.Mailbox#displayNewAppointmentForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml var start = new Date(); @@ -7266,7 +7266,7 @@ 'Office.Mailbox#displayNewMessageForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-message.yaml + 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 @@ -7285,13 +7285,13 @@ 'Office.AppointmentRead#displayReplyForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml + 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
", @@ -7309,13 +7309,13 @@ 'Office.MessageRead#displayReplyForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml + 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
", @@ -7333,21 +7333,21 @@ 'Office.AppointmentRead#displayReplyAllForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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#displayReplyAllForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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.Mailbox#displayAppointmentFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml var itemId = $("#itemId").val(); @@ -7363,7 +7363,7 @@ 'Office.Mailbox#displayMessageFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml var itemId = $("#itemId").val(); @@ -7379,7 +7379,7 @@ 'Office.Mailbox#displayNewAppointmentFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml var start = new Date(); @@ -7410,7 +7410,7 @@ 'Office.Mailbox#displayNewMessageFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-message.yaml + 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, @@ -7438,7 +7438,7 @@ 'Office.AppointmentRead#displayReplyFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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( @@ -7448,7 +7448,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml + 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, @@ -7469,7 +7469,7 @@ 'Office.MessageRead#displayReplyFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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( @@ -7479,7 +7479,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml + 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, @@ -7500,7 +7500,7 @@ 'Office.AppointmentRead#displayReplyAllFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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( @@ -7511,7 +7511,7 @@ 'Office.MessageRead#displayReplyAllFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + 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( @@ -7522,7 +7522,7 @@ 'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7536,7 +7536,7 @@ 'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7550,7 +7550,7 @@ 'Office.MessageCompose#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7564,7 +7564,7 @@ 'Office.MessageRead#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7578,7 +7578,7 @@ 'Office.AppointmentCompose#getSharedPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7624,7 +7624,7 @@ 'Office.AppointmentRead#getSharedPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7670,7 +7670,7 @@ 'Office.MessageCompose#getSharedPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7716,7 +7716,7 @@ 'Office.MessageRead#getSharedPropertiesAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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."); @@ -7762,7 +7762,7 @@ 'Office.AppointmentRead#getEntities:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml var entities = Office.context.mailbox.item.getEntities(); @@ -7818,7 +7818,7 @@ 'Office.MessageRead#getEntities:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml var entities = Office.context.mailbox.item.getEntities(); @@ -7874,19 +7874,19 @@ 'Office.AppointmentRead#getEntitiesByType:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + 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#getEntitiesByType:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + 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/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml + 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. @@ -7895,7 +7895,7 @@ 'Office.MessageRead#getFilteredEntitiesByName:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml + 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. @@ -7904,7 +7904,7 @@ 'Office.AppointmentRead#getRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml + 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". @@ -7912,7 +7912,7 @@ 'Office.MessageRead#getRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml + 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". @@ -7920,7 +7920,7 @@ 'Office.AppointmentRead#getRegExMatchesByName:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml + 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". @@ -7928,7 +7928,7 @@ 'Office.MessageRead#getRegExMatchesByName:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml + 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". @@ -7936,7 +7936,7 @@ 'Office.AppointmentRead#getSelectedEntities:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml var entities = Office.context.mailbox.item.getSelectedEntities(); @@ -7992,7 +7992,7 @@ 'Office.MessageRead#getSelectedEntities:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml var entities = Office.context.mailbox.item.getSelectedEntities(); @@ -8048,7 +8048,7 @@ 'Office.AppointmentRead#getSelectedRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml var matches = Office.context.mailbox.item.getSelectedRegExMatches(); @@ -8062,7 +8062,7 @@ 'Office.MessageRead#getSelectedRegExMatches:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml var matches = Office.context.mailbox.item.getSelectedRegExMatches(); @@ -8076,7 +8076,7 @@ 'Office.Mailbox#convertToRestId:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/basic-rest-cors.yaml Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { @@ -8095,7 +8095,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/ids-and-urls.yaml console.log("EWS URL: " + Office.context.mailbox.ewsUrl); @@ -8119,7 +8119,7 @@ 'Office.Mailbox#restUrl:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/basic-rest-cors.yaml Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { @@ -8138,7 +8138,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/ids-and-urls.yaml console.log("EWS URL: " + Office.context.mailbox.ewsUrl); @@ -8162,7 +8162,7 @@ 'Office.Mailbox#getCallbackTokenAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/basic-rest-cors.yaml Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { @@ -8182,7 +8182,7 @@ 'Office.Mailbox#ewsUrl:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/ids-and-urls.yaml console.log("EWS URL: " + Office.context.mailbox.ewsUrl); @@ -8206,7 +8206,7 @@ 'Office.Mailbox#convertToEwsId:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/ids-and-urls.yaml console.log("EWS URL: " + Office.context.mailbox.ewsUrl); @@ -8230,7 +8230,7 @@ 'Office.AppointmentCompose#getItemIdAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + 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) { @@ -8242,7 +8242,7 @@ 'Office.MessageCompose#getItemIdAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + 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) { @@ -8254,7 +8254,7 @@ 'Office.Mailbox#makeEwsRequestAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml var ewsId = Office.context.mailbox.item.itemId; @@ -8281,7 +8281,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/send-message-using-make-ews-request-async.yaml var request = '- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/user-callback-token.yaml Office.context.mailbox.getCallbackTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -8323,7 +8323,7 @@ 'Office.Mailbox#getUserIdentityTokenAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/user-identity-token.yaml Office.context.mailbox.getUserIdentityTokenAsync(function (result) { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -8335,7 +8335,7 @@ 'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Get the compose type of the current item (mail only). @@ -8354,7 +8354,7 @@ 'Office.Body#setSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Set the signature for the current item with inline image. @@ -8384,7 +8384,7 @@ ); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Set the signature for the current item. @@ -8403,7 +8403,7 @@ 'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Disable the client signature. @@ -8418,7 +8418,7 @@ 'Office.MessageCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Disable the client signature. @@ -8433,7 +8433,7 @@ 'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Check if the client signature is currently enabled. @@ -8448,7 +8448,7 @@ 'Office.MessageCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml // Check if the client signature is currently enabled. @@ -8463,19 +8463,19 @@ 'Office.AppointmentRead#subject:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-subject-read.yaml + 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#subject:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-subject-read.yaml + 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.AppointmentCompose#subject:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + 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) { @@ -8486,7 +8486,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml let subject = "Hello World!"; @@ -8500,7 +8500,7 @@ 'Office.MessageCompose#subject:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + 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) { @@ -8511,7 +8511,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml let subject = "Hello World!"; @@ -8525,62 +8525,62 @@ 'Office.MessageRead#internetMessageId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml + 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.AppointmentRead#itemClass:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-class-read.yaml + 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#itemClass:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-class-read.yaml + 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.AppointmentCompose#itemType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.AppointmentRead#itemType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.MessageCompose#itemType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.MessageRead#itemType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml console.log(`Item type: ${Office.context.mailbox.item.itemType}`); 'Office.AppointmentRead#start:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-start-read.yaml + 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#start:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-start-read.yaml + 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.AppointmentCompose#start:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + 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) { @@ -8591,7 +8591,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml var start = new Date(); // Represents current date and time. @@ -8607,7 +8607,7 @@ 'Office.Time#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + 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) { @@ -8619,7 +8619,7 @@ 'Office.Time#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml var start = new Date(); // Represents current date and time. @@ -8634,7 +8634,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + 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) { @@ -8655,75 +8655,75 @@ 'Office.AppointmentRead#normalizedSubject:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + 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#normalizedSubject:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + 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.MessageCompose#conversationId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + 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#conversationId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + 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.AppointmentRead#dateTimeCreated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + 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#dateTimeCreated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + 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': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + 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#dateTimeModified:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + 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#end:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-end-read.yaml + 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#end:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-end-read.yaml + 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.AppointmentCompose#end:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + 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) { @@ -8734,7 +8734,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + 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) { @@ -8755,21 +8755,21 @@ 'Office.AppointmentRead#location:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-location-read.yaml + 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#location:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-location-read.yaml + 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.AppointmentCompose#location:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + 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) { @@ -8780,7 +8780,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml var location = "my office"; @@ -8794,7 +8794,7 @@ 'Office.Location#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + 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) { @@ -8806,7 +8806,7 @@ 'Office.Location#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml var location = "my office"; @@ -8820,7 +8820,7 @@ 'Office.AppointmentCompose#enhancedLocation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + 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) { @@ -8841,7 +8841,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml var locations = [ { @@ -8864,7 +8864,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml var locations = [ { @@ -8888,7 +8888,7 @@ 'Office.AppointmentRead#enhancedLocation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + 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) { @@ -8910,7 +8910,7 @@ 'Office.EnhancedLocation#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + 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) { @@ -8932,7 +8932,7 @@ 'Office.EnhancedLocation#addAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml var locations = [ { @@ -8956,7 +8956,7 @@ 'Office.EnhancedLocation#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml var locations = [ { @@ -8980,7 +8980,7 @@ 'Office.AppointmentCompose#isAllDayEvent:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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) { @@ -8991,7 +8991,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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) { @@ -9004,7 +9004,7 @@ 'Office.IsAllDayEvent#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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) { @@ -9016,7 +9016,7 @@ 'Office.IsAllDayEvent#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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) { @@ -9029,7 +9029,7 @@ 'Office.AppointmentCompose#sensitivity:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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) { @@ -9040,7 +9040,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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, @@ -9055,7 +9055,7 @@ 'Office.Sensitivity#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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) { @@ -9067,7 +9067,7 @@ 'Office.Sensitivity#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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, @@ -9082,7 +9082,7 @@ 'Office.AppointmentCompose#sessionData:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9094,7 +9094,7 @@ 'Office.MessageCompose#sessionData:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9106,7 +9106,7 @@ 'Office.SessionData#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml Office.context.mailbox.item.sessionData.setAsync( "Date", @@ -9121,7 +9121,7 @@ 'Office.SessionData#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAsync( "Date", @@ -9135,7 +9135,7 @@ 'Office.SessionData#getAllAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9147,7 +9147,7 @@ 'Office.SessionData#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml Office.context.mailbox.item.sessionData.removeAsync( "Date", @@ -9162,7 +9162,7 @@ 'Office.SessionData#clearAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml Office.context.mailbox.item.sessionData.clearAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9174,7 +9174,7 @@ 'Office.MessageRead#getAllInternetHeadersAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml + 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) { @@ -9199,7 +9199,7 @@ 'Office.MessageCompose#internetHeaders:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + 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"], @@ -9214,7 +9214,7 @@ 'Office.InternetHeaders#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + 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"], @@ -9229,7 +9229,7 @@ 'Office.InternetHeaders#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + 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"], @@ -9244,7 +9244,7 @@ 'Office.InternetHeaders#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + 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" }, @@ -9260,7 +9260,7 @@ 'PowerPoint.Presentation#insertSlidesFromBase64:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/preview-apis/insert-slides.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/insert-slides.yaml await PowerPoint.run(async function(context) { const selectedSlideID = await getSelectedSlideID(); @@ -9274,7 +9274,7 @@ 'Word.Body#search:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/search.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml await Word.run(async (context) => { let results = context.document.body.search("Online"); @@ -9291,7 +9291,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/search.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml await Word.run(async (context) => { // Check out how wildcard expression are built, also use the second parameter of the search method to include search modes @@ -9311,7 +9311,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-word-count.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml await Word.run(async (context) => { let paragraphs = context.document.body.paragraphs; @@ -9360,7 +9360,7 @@ 'Word.Body#insertTable:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/40-tables/table-cell-access.yaml + 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. @@ -9377,7 +9377,7 @@ 'Word.Body#paragraphs:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-word-count.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml await Word.run(async (context) => { let paragraphs = context.document.body.paragraphs; @@ -9426,7 +9426,7 @@ 'Word.ContentControl#tag:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/10-content-controls/insert-and-change-content-controls.yaml + 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. @@ -9453,7 +9453,7 @@ 'Word.ContentControl#set:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/10-content-controls/insert-and-change-content-controls.yaml + 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. @@ -9492,7 +9492,7 @@ 'Word.ContentControlCollection#getByTag:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/doc-assembly.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml await Word.run(async (context) => { let contentControls = context.document.contentControls.getByTag("customer"); @@ -9509,7 +9509,7 @@ 'Word.CustomPropertyCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/read-write-custom-document-properties.yaml + 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); @@ -9519,7 +9519,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/read-write-custom-document-properties.yaml + 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!"); @@ -9530,7 +9530,7 @@ 'Word.CustomPropertyCollection#items:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/read-write-custom-document-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml await Word.run(async (context) => { let properties = context.document.properties.customProperties; @@ -9543,7 +9543,7 @@ 'Word.Document#properties:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/get-built-in-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml await Word.run(async (context) => { let builtInProperties = context.document.properties; @@ -9555,7 +9555,7 @@ 'Word.InlinePicture#getBase64ImageSrc:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/15-images/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); @@ -9572,7 +9572,7 @@ 'Word.Paragraph#insertBreak:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-line-and-page-breaks.yaml + 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"); @@ -9583,7 +9583,7 @@ 'Word.Paragraph#insertParagraph:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-formatted-text.yaml + 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. @@ -9604,7 +9604,7 @@ 'Word.Paragraph#text:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + 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. @@ -9617,7 +9617,7 @@ 'Word.Paragraph#leftIndent:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { // Indents the first paragraph. @@ -9628,7 +9628,7 @@ 'Word.Paragraph#lineSpacing:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { // Adjusts line spacing. @@ -9639,7 +9639,7 @@ 'Word.Paragraph#spaceAfter:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + 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. @@ -9650,7 +9650,7 @@ 'Word.Paragraph#alignment:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { // Centers last paragraph alignment. @@ -9661,7 +9661,7 @@ 'Word.Paragraph#insertText:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-in-different-locations.yaml + 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. @@ -9674,7 +9674,7 @@ 'Word.Paragraph#select:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/35-ranges/scroll-to-range.yaml + 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. @@ -9684,7 +9684,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/35-ranges/scroll-to-range.yaml + 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. @@ -9695,7 +9695,7 @@ 'Word.Paragraph#split:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/35-ranges/split-words-of-first-paragraph.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) => { let paragraph = context.document.body.paragraphs.getFirst(); @@ -9717,7 +9717,7 @@ 'Word.Paragraph#startNewList:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/20-lists/insert-list.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/insert-list.yaml // This example starts a new list stating with the second paragraph. @@ -9744,7 +9744,7 @@ 'Word.Paragraph#set:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/multiple-property-set.yaml + 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(); @@ -9760,7 +9760,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/multiple-property-set.yaml + 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(); @@ -9776,7 +9776,7 @@ 'Word.Range#insertContentControl:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/doc-assembly.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml await Word.run(async (context) => { let results = context.document.body.search("Contractor"); @@ -9800,7 +9800,7 @@ 'Word.Range#getTextRanges:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml await Word.run(async (context) => { // Gets the complete sentence (as range) associated with the insertion point. @@ -9830,7 +9830,7 @@ 'Word.Section#getHeader:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-header-and-footer.yaml + 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().getHeader("Primary") @@ -9841,7 +9841,7 @@ 'Word.Section#getFooter:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-header-and-footer.yaml + 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().getFooter("Primary") @@ -9852,7 +9852,7 @@ 'Word.Table#getCell:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/40-tables/table-cell-access.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml await Word.run(async (context) => { let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; diff --git a/view-prod/excel.json b/view-prod/excel.json new file mode 100644 index 000000000..0bf88c1a4 --- /dev/null +++ b/view-prod/excel.json @@ -0,0 +1,121 @@ +{ + "excel-basics-basic-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/01-basics/basic-api-call.yaml", + "excel-basics-basic-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/01-basics/basic-api-call-es5.yaml", + "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/01-basics/basic-common-api-call.yaml", + "excel-chart-axis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml", + "excel-chart-axis-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis-formatting.yaml", + "excel-chart-bubble-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml", + "excel-chart-create-several-charts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-create-several-charts.yaml", + "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/create-doughnut-chart.yaml", + "excel-chart-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-formatting.yaml", + "excel-chart-legend": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-legend.yaml", + "excel-chart-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-point.yaml", + "excel-chart-series": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series.yaml", + "excel-chart-series-markers": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml", + "excel-chart-series-plotorder": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-plotorder.yaml", + "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-title-format.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-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", + "excel-custom-functions-volatile": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/volatile-function.yaml", + "excel-custom-functions-streaming": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/streaming-function.yaml", + "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-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-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", + "excel-document-custom-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml", + "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chartcollection-added-activated.yaml", + "excel-events-chart-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml", + "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml", + "excel-events-data-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-changed.yaml", + "excel-data-change-event-details": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-change-event-details.yaml", + "excel-events-disable-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml", + "excel-selection-changed-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/selection-changed-events.yaml", + "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml", + "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml", + "excel-events-table-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml", + "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", + "excel-events-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml", + "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml", + "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml", + "excel-update-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/update-named-item.yaml", + "excel-pivottable-calculations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml", + "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", + "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", + "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", + "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml", + "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", + "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml", + "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml", + "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml", + "excel-range-find": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml", + "excel-range-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/formatting.yaml", + "excel-range-cell-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml", + "excel-range-hyperlink": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml", + "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/insert-delete-clear-range.yaml", + "excel-outline": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml", + "excel-range-range-relationships": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml", + "excel-range-remove-duplicates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml", + "excel-range-selected-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/selected-range.yaml", + "excel-direct-precedents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml", + "excel-range-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml", + "excel-range-text-orientation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-text-orientation.yaml", + "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml", + "excel-range-used-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml", + "excel-range-values-and-formulas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/set-get-values.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", + "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-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", + "excel-table-filter-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/filter-data.yaml", + "excel-table-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/formatting.yaml", + "excel-table-get-data-from-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/get-data-from-table.yaml", + "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", + "excel-table-import-json-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/import-json-data.yaml", + "excel-table-sort-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/sort-data.yaml", + "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml", + "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml", + "excel-workbook-calculation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml", + "excel-workbook-create-workbook": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-workbook.yaml", + "excel-culture-info": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info.yaml", + "excel-culture-info-date-time": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info-date-time.yaml", + "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-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", + "excel-worksheet-copy": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml", + "excel-worksheet-find-all": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml", + "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-freeze-panes.yaml", + "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-range-cell.yaml", + "excel-worksheet-gridlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/gridlines.yaml", + "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/list-worksheets.yaml", + "excel-worksheet-page-layout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml", + "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", + "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml", + "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", + "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", + "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", + "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/working-with-dates.yaml", + "excel-scenarios-currency-converter": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/currency-converter.yaml", + "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/patterns.yaml", + "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/gradient.yaml", + "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/path-finder-game.yaml", + "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/tetrominos.yaml", + "excel-just-for-fun-color-wheel": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/99-just-for-fun/color-wheel.yaml" +} \ No newline at end of file diff --git a/view-prod/outlook.json b/view-prod/outlook.json new file mode 100644 index 000000000..becde1ac8 --- /dev/null +++ b/view-prod/outlook.json @@ -0,0 +1,69 @@ +{ + "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml", + "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", + "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml", + "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.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-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", + "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", + "outlook-recipients-and-attendees-get-set-to-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml", + "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", + "outlook-recipients-and-attendees-get-set-cc-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml", + "outlook-recipients-and-attendees-get-set-bcc-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml", + "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", + "outlook-recipients-and-attendees-get-required-attendees-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-set-required-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-optional-attendees-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", + "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml", + "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml", + "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml", + "outlook-attachments-get-attachments-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml", + "outlook-categories-work-with-categories": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml", + "outlook-categories-work-with-master-categories": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml", + "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml", + "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml", + "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", + "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml", + "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml", + "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml", + "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml", + "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml", + "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml", + "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-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-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-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", + "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml", + "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml", + "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml", + "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", + "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml", + "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", + "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml", + "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml", + "outlook-other-item-apis-get-add-remove-enhancedlocation-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", + "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", + "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", + "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", + "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", + "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml", + "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" +} \ No newline at end of file diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json new file mode 100644 index 000000000..20db96652 --- /dev/null +++ b/view-prod/powerpoint.json @@ -0,0 +1,9 @@ +{ + "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/basics/create-presentation.yaml", + "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-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/insert-slides.yaml", + "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml" +} \ No newline at end of file diff --git a/view-prod/project.json b/view-prod/project.json new file mode 100644 index 000000000..605dd28bd --- /dev/null +++ b/view-prod/project.json @@ -0,0 +1,3 @@ +{ + "project-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/project/basics/basic-common-api-call.yaml" +} \ No newline at end of file diff --git a/view-prod/word.json b/view-prod/word.json new file mode 100644 index 000000000..dbec5926b --- /dev/null +++ b/view-prod/word.json @@ -0,0 +1,23 @@ +{ + "word-basics-basic-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-api-call.yaml", + "word-basics-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-api-call-es5.yaml", + "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-common-api-call.yaml", + "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.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-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", + "word-paragraph-insert-in-different-locations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-in-different-locations.yaml", + "word-paragraph-insert-formatted-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml", + "word-paragraph-insert-header-and-footer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml", + "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-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", + "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.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" +} \ No newline at end of file From b246c71879917d5e677b558bcb1ccd563057bbbd Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 15 Jan 2021 09:34:06 -0800 Subject: [PATCH 002/336] [Admin] Update to main (#517) --- .vscode/launch.json | 2 +- README.md | 6 +- config/build.ts | 4 +- playlists/excel.yaml | 236 ++++++++++++++++++------------------- playlists/outlook.yaml | 134 ++++++++++----------- playlists/powerpoint.yaml | 14 +-- playlists/project.yaml | 2 +- playlists/word.yaml | 42 +++---- view/excel.json | 238 +++++++++++++++++++------------------- view/outlook.json | 134 ++++++++++----------- view/powerpoint.json | 14 +-- view/project.json | 2 +- view/word.json | 42 +++---- 13 files changed, 435 insertions(+), 435 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 21798b350..e414c1f67 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -23,7 +23,7 @@ // "outFiles": [], // "env": { // "TRAVIS": "true", - // "TRAVIS_BRANCH": "master", + // "TRAVIS_BRANCH": "main", // "TRAVIS_PULL_REQUEST": "false", // "TRAVIS_COMMIT_MESSAGE": "Deploy", // "GH_ACCOUNT": "OfficeDev", diff --git a/README.md b/README.md index dbb4e2fea..64e09f76d 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 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 master branch of your fork is in sync with the master 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/). +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: @@ -70,7 +70,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr 19. On the **Open a pull request** page, verify that: - the base fork is `OfficeDev/office-js-snippets` - - the base branch is `master` + - the base branch is `main` - the head fork is `{your-GitHub-account}/office-js-snippets` - the "compare" branch is `{name_of_your_new_branch}`. @@ -81,7 +81,7 @@ A collection of code snippets built with [Script Lab](//github.com/OfficeDev/scr > **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 `master` branch and the pull request will be closed. +24. 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.) diff --git a/config/build.ts b/config/build.ts index 41e1700db..bd47124f6 100644 --- a/config/build.ts +++ b/config/build.ts @@ -123,7 +123,7 @@ async function processSnippets(processedSnippets: Dictionary item instanceof Error) >= 0) { @@ -606,7 +606,7 @@ async function copyAndUpdatePlaylistFolders() { async function updateCopiedFile(folderPath: string, filePath: string) { const fullPath = path.resolve(folderPath, filePath); let content = fsx.readFileSync(fullPath).toString().trim().replace( - /\/OfficeDev\/office-js-snippets\/master/g, + /\/OfficeDev\/office-js-snippets\/main/g, '/OfficeDev/office-js-snippets/prod'); const fileUpdates = []; fileUpdates.push( diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 32a23d771..31ed335b1 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -3,7 +3,7 @@ fileName: basic-api-call.yaml description: Performs a basic Excel API call using TypeScript. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/01-basics/basic-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/01-basics/basic-api-call.yaml group: Basics api_set: ExcelApi: '1.1' @@ -12,7 +12,7 @@ fileName: basic-api-call-es5.yaml description: Performs a basic Excel API call using plain JavaScript & Promises. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/01-basics/basic-api-call-es5.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/01-basics/basic-api-call-es5.yaml group: Basics api_set: ExcelApi: '1.1' @@ -23,7 +23,7 @@ Performs a basic Excel API call using JavaScript with the "common API" syntax (compatible with Office 2013). rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/01-basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/01-basics/basic-common-api-call.yaml group: Basics api_set: Selection: 1.1 @@ -32,7 +32,7 @@ fileName: chart-axis.yaml description: 'Gets, sets, and removes axis unit, label, and title in a chart.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-axis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis.yaml group: Chart api_set: ExcelApi: '1.7' @@ -41,7 +41,7 @@ fileName: chart-axis-formatting.yaml description: Formats the vertical and horizontal axes in a chart. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-axis-formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis-formatting.yaml group: Chart api_set: ExcelApi: '1.8' @@ -52,7 +52,7 @@ Creates a bubble chart with each data row represented as a single chart series (bubble). rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-bubble-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-bubble-chart.yaml group: Chart api_set: ExcelApi: '1.12' @@ -63,7 +63,7 @@ Creates column-clustered, line, XY-scatter, area, radar, pie, 3D, cylinder, and 100% charts. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-create-several-charts.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-create-several-charts.yaml group: Chart api_set: ExcelApi: '1.4' @@ -72,7 +72,7 @@ fileName: create-doughnut-chart.yaml description: Creates a doughnut chart and adjusts its size. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/create-doughnut-chart.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/create-doughnut-chart.yaml group: Chart api_set: ExcelApi: '1.7' @@ -81,7 +81,7 @@ fileName: chart-formatting.yaml description: Formats labels and lines of a slope chart. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-formatting.yaml group: Chart api_set: ExcelApi: '1.8' @@ -90,7 +90,7 @@ fileName: chart-legend.yaml description: Formats the legend's font. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-legend.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-legend.yaml group: Chart api_set: ExcelApi: '1.7' @@ -99,7 +99,7 @@ fileName: chart-point.yaml description: Sets the color of a point on the chart. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-point.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-point.yaml group: Chart api_set: ExcelApi: '1.7' @@ -108,7 +108,7 @@ fileName: chart-series.yaml description: Adds and deletes series in a chart. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series.yaml group: Chart api_set: ExcelApi: '1.7' @@ -117,7 +117,7 @@ fileName: chart-series-markers.yaml description: Sets the chart series marker properties. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-markers.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series-markers.yaml group: Chart api_set: ExcelApi: '1.7' @@ -126,7 +126,7 @@ fileName: chart-series-plotorder.yaml description: Orders the plotting of series in a chart. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-plotorder.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series-plotorder.yaml group: Chart api_set: ExcelApi: '1.7' @@ -135,7 +135,7 @@ fileName: chart-title-format.yaml description: Adjust a chart title's format. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-title-format.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-title-format.yaml group: Chart api_set: ExcelApi: '1.7' @@ -144,7 +144,7 @@ fileName: chart-trendlines.yaml description: 'Adds, gets, and formats trendlines in a chart.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-trendlines.yaml group: Chart api_set: ExcelApi: '1.7' @@ -153,7 +153,7 @@ fileName: comment-basics.yaml description: 'Adds, edits, and removes comments.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-basics.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-basics.yaml group: Comment api_set: ExcelApi: '1.10' @@ -162,7 +162,7 @@ fileName: comment-mentions.yaml description: Mentions someone in a comment. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-mentions.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-mentions.yaml group: Comment api_set: ExcelApi: '1.11' @@ -171,7 +171,7 @@ fileName: comment-replies.yaml description: 'Adds, edits, and removes comment replies.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-replies.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-replies.yaml group: Comment api_set: ExcelApi: '1.10' @@ -180,7 +180,7 @@ fileName: comment-resolution.yaml description: Resolves and reopens a comment thread. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-resolution.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/12-comment/comment-resolution.yaml group: Comment api_set: ExcelApi: '1.10' @@ -189,7 +189,7 @@ fileName: conditional-formatting-basic.yaml description: Applies common types of conditional formatting to ranges. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml group: Conditional Formatting api_set: ExcelApi: '1.6' @@ -198,7 +198,7 @@ fileName: conditional-formatting-advanced.yaml description: Applies more than one conditional format on the same range. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml group: Conditional Formatting api_set: ExcelApi: '1.6' @@ -207,7 +207,7 @@ fileName: basic-function.yaml description: Calculates the volume of a sphere. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/basic-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/basic-function.yaml group: Custom Functions api_set: CustomFunctionsRuntime: 1.1 @@ -216,7 +216,7 @@ fileName: volatile-function.yaml description: Rolls a 6 sided die that returns a possible new value every calculation. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/volatile-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/volatile-function.yaml group: Custom Functions api_set: CustomFunctionsRuntime: 1.1 @@ -225,7 +225,7 @@ fileName: streaming-function.yaml description: A streaming function that continuously increments the cell value. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/streaming-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/streaming-function.yaml group: Custom Functions api_set: CustomFunctionsRuntime: 1.1 @@ -234,7 +234,7 @@ fileName: web-call-function.yaml description: Calls the GitHub API to get the star count for an org/user and repository. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/web-call-function.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/web-call-function.yaml group: Custom Functions api_set: CustomFunctionsRuntime: 1.1 @@ -243,7 +243,7 @@ fileName: create-set-get-and-delete-custom-xml-parts.yaml description: 'Creates, sets, gets, and deletes a custom XML part.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/create-set-get-and-delete-custom-xml-parts.yaml + 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 api_set: ExcelApi: '1.5' @@ -252,7 +252,7 @@ fileName: test-xml-for-unique-namespace.yaml description: Tests to see if there is only one XML part for a specified namespace. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml group: Custom XML Parts api_set: ExcelApi: '1.5' @@ -263,7 +263,7 @@ Sets data validation rules on ranges, prompts users to enter valid data, and displays messages when invalid data is entered. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/22-data-validation/data-validation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/22-data-validation/data-validation.yaml group: Data Validation api_set: ExcelApi: '1.8' @@ -274,7 +274,7 @@ Uses slicing to get the byte array and base64-encoded string that represent the current document. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/get-file-in-slices-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/26-document/get-file-in-slices-async.yaml group: Document api_set: ExcelApi: '1.4' @@ -283,7 +283,7 @@ fileName: properties.yaml description: Gets and sets document properties. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/26-document/properties.yaml group: Document api_set: ExcelApi: '1.7' @@ -292,7 +292,7 @@ fileName: custom-properties.yaml description: Gets and sets custom properties at the document and worksheet levels. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/26-document/custom-properties.yaml group: Document api_set: ExcelAPI: '1.12' @@ -304,7 +304,7 @@ chart within is activated or deactivated, as well as when charts are added to or deleted from the collection. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-chartcollection-added-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-chartcollection-added-activated.yaml group: Events api_set: ExcelApi: '1.8' @@ -315,7 +315,7 @@ Registers event handlers on an individual chart that run when the chart is activated or deactivated. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-chart-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-chart-activated.yaml group: Events api_set: ExcelApi: '1.8' @@ -326,7 +326,7 @@ Registers event handlers that run when column or row sorting events occur in the current worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-column-and-row-sort.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/event-column-and-row-sort.yaml group: Events api_set: ExcelApi: '1.10' @@ -335,7 +335,7 @@ fileName: data-changed.yaml description: Registers an event handler that runs when data is changed. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/data-changed.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/data-changed.yaml group: Events api_set: ExcelApi: '1.4' @@ -344,7 +344,7 @@ fileName: data-change-event-details.yaml description: Uses the onChanged event of a table to determine the specifics of changes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/data-change-event-details.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/data-change-event-details.yaml group: Events api_set: ExcelApi: '1.9' @@ -353,7 +353,7 @@ fileName: events-disable-events.yaml description: Toggles event firing on and off. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-disable-events.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-disable-events.yaml group: Events api_set: ExcelApi: '1.8' @@ -364,7 +364,7 @@ Registers handlers all the different `onSelectionChanged` events and displays how each event reports the selected addresses. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/selection-changed-events.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/selection-changed-events.yaml group: Events api_set: ExcelApi: '1.7' @@ -375,7 +375,7 @@ Registers an event handler that runs when a single-click event occurs in the current worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-worksheet-single-click.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/event-worksheet-single-click.yaml group: Events api_set: ExcelApi: '1.10' @@ -384,7 +384,7 @@ fileName: events-tablecollection-changed.yaml description: Registers an event handler that runs when a table collection is changed. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-tablecollection-changed.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-tablecollection-changed.yaml group: Events api_set: ExcelApi: '1.7' @@ -393,7 +393,7 @@ fileName: events-table-changed.yaml description: Registers event handlers that run when a table is changed or selected. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-table-changed.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-table-changed.yaml group: Events api_set: ExcelApi: '1.7' @@ -404,7 +404,7 @@ Registers event handlers that run when a worksheet is added, activated, or deactivated, or when the settings of a workbook are changed. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml group: Events api_set: ExcelApi: '1.7' @@ -415,7 +415,7 @@ Registers event handlers that run when data is changed in worksheet, the selected range changes in a worksheet, or the worksheet is recalculated. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-worksheet.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-worksheet.yaml group: Events api_set: ExcelApi: '1.7' @@ -426,7 +426,7 @@ Registers event handlers to listen for comment additions, changes, and deletions. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-comment-event-handler.yaml group: Events api_set: ExcelAPI: '1.12' @@ -435,7 +435,7 @@ fileName: create-and-remove-named-item.yaml description: 'Creates, accesses, and removes named items in a worksheet.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/create-and-remove-named-item.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/create-and-remove-named-item.yaml group: Named Item api_set: ExcelApi: '1.4' @@ -444,7 +444,7 @@ fileName: update-named-item.yaml description: Creates and then updates a named item. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/update-named-item.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/update-named-item.yaml group: Named Item api_set: ExcelApi: '1.7' @@ -453,7 +453,7 @@ fileName: pivottable-calculations.yaml description: Changes the calculations the PivotTable performs. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-calculations.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-calculations.yaml group: PivotTable api_set: ExcelApi: '1.8' @@ -462,7 +462,7 @@ fileName: pivottable-create-and-modify.yaml description: Creates and modifies a PivotTable. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-create-and-modify.yaml group: PivotTable api_set: ExcelApi: '1.8' @@ -471,7 +471,7 @@ fileName: pivottable-filters-and-summaries.yaml description: Filters PivotTable data and shows different summarizations. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml group: PivotTable api_set: ExcelApi: '1.8' @@ -482,7 +482,7 @@ Get existing PivotTables in the workbook through their collections and through the ranges they occupy. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-get-pivottables.yaml group: PivotTable api_set: ExcelAPI: '1.12' @@ -491,7 +491,7 @@ fileName: pivottable-slicer.yaml description: Adds a slicer to a PivotTable. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml group: PivotTable api_set: ExcelApi: '1.10' @@ -500,7 +500,7 @@ fileName: pivottable-pivotfilters.yaml description: Applies PivotFilters to a PivotTable. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotfilters.yaml group: PivotTable api_set: ExcelAPI: '1.12' @@ -509,7 +509,7 @@ fileName: range-auto-fill.yaml description: Writes to cells with the auto fill feature. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-auto-fill.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-auto-fill.yaml group: Range api_set: ExcelApi: '1.10' @@ -518,7 +518,7 @@ fileName: range-copyfrom.yaml description: Copies or moves data and formatting from one range to another. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-copyfrom.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-copyfrom.yaml group: Range api_set: ExcelApi: '1.10' @@ -530,7 +530,7 @@ contiguous, through user selection and programmatic selection of special cells. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-areas.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-areas.yaml group: Range api_set: ExcelApi: '1.9' @@ -539,7 +539,7 @@ fileName: range-find.yaml description: Finds a cell within a range based on string matching. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-find.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-find.yaml group: Range api_set: ExcelApi: '1.9' @@ -548,7 +548,7 @@ fileName: formatting.yaml description: Formats a range. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/formatting.yaml group: Range api_set: ExcelApi: '1.4' @@ -557,7 +557,7 @@ fileName: cell-properties.yaml description: Sets different properties across a range then retrieves those properties. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/cell-properties.yaml group: Range api_set: ExcelApi: '1.9' @@ -566,7 +566,7 @@ fileName: range-hyperlink.yaml description: 'Creates, updates, and clears hyperlinks in a range.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-hyperlink.yaml group: Range api_set: ExcelApi: '1.7' @@ -575,7 +575,7 @@ fileName: insert-delete-clear-range.yaml description: 'Inserts, deletes, and clears a range.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/insert-delete-clear-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/insert-delete-clear-range.yaml group: Range api_set: ExcelApi: '1.4' @@ -584,7 +584,7 @@ fileName: outline.yaml description: Creates an outline by grouping rows and columns. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/outline.yaml group: Range api_set: ExcelApi: '1.10' @@ -595,7 +595,7 @@ Shows relationships between ranges, such as bounding rectangles and intersections. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-relationships.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-relationships.yaml group: Range api_set: ExcelApi: '1.4' @@ -604,7 +604,7 @@ fileName: range-remove-duplicates.yaml description: Removes duplicate entries from a range. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-remove-duplicates.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-remove-duplicates.yaml group: Range api_set: ExcelApi: '1.9' @@ -613,7 +613,7 @@ fileName: selected-range.yaml description: Gets and sets the currently selected range. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/selected-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/selected-range.yaml group: Range api_set: ExcelApi: '1.1' @@ -624,7 +624,7 @@ This sample shows how to find and highlight the precedents of the currently selected cell. Precedents are cells referenced by the formula in a cell. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/direct-precedents.yaml group: Range api_set: ExcelAPI: '1.12' @@ -635,7 +635,7 @@ Creates a custom style, applies a custom and built-in styles to a range, gets style properties, and deletes the custom style. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/style.yaml group: Range api_set: ExcelApi: '1.7' @@ -644,7 +644,7 @@ fileName: range-text-orientation.yaml description: Gets and sets the text orientation within a range. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-text-orientation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-text-orientation.yaml group: Range api_set: ExcelApi: '1.7' @@ -655,7 +655,7 @@ Applies formulas that use dynamic arrays and displays information about the ranges used to display the data. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/dynamic-arrays.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/dynamic-arrays.yaml group: Range api_set: ExcelAPI: '1.12' @@ -666,7 +666,7 @@ Tests for a used range and creates a chart from a table only if there's data in the table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/used-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/used-range.yaml group: Range api_set: ExcelApi: '1.4' @@ -675,7 +675,7 @@ fileName: set-get-values.yaml description: Gets and sets values and formulas for a range. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/set-get-values.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/set-get-values.yaml group: Range api_set: ExcelApi: '1.4' @@ -686,7 +686,7 @@ Creates a few different geometric shapes and deletes them from the worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-create-and-delete.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-create-and-delete.yaml group: Shape api_set: ExcelApi: '1.9' @@ -695,7 +695,7 @@ fileName: shape-images.yaml description: Creates and adjusts image-based shapes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-images.yaml group: Shape api_set: ExcelApi: '1.9' @@ -704,7 +704,7 @@ fileName: shape-lines.yaml description: Creates and modifies line shapes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-lines.yaml group: Shape api_set: ExcelApi: '1.9' @@ -713,7 +713,7 @@ fileName: shape-move-and-order.yaml description: Moves created shapes around the worksheet and adjusts their z-order. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-move-and-order.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-move-and-order.yaml group: Shape api_set: ExcelApi: '1.9' @@ -722,7 +722,7 @@ fileName: shape-groups.yaml description: Groups and ungroups shapes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-groups.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-groups.yaml group: Shape api_set: ExcelApi: '1.9' @@ -731,7 +731,7 @@ fileName: shape-textboxes.yaml description: Creates a textbox shape and works with the text in it and other shapes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-textboxes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/44-shape/shape-textboxes.yaml group: Shape api_set: ExcelApi: '1.9' @@ -740,7 +740,7 @@ fileName: add-rows-and-columns-to-a-table.yaml description: Adds rows and columns to a table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/add-rows-and-columns-to-a-table.yaml group: Table api_set: ExcelApi: '1.4' @@ -749,7 +749,7 @@ fileName: convert-range-to-table.yaml description: Converts a range to a table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/convert-range-to-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/convert-range-to-table.yaml group: Table api_set: ExcelApi: '1.4' @@ -758,7 +758,7 @@ fileName: create-table.yaml description: Creates a table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/create-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/create-table.yaml group: Table api_set: ExcelApi: '1.4' @@ -767,7 +767,7 @@ fileName: filter-data.yaml description: Filters table data. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/filter-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/filter-data.yaml group: Table api_set: ExcelApi: '1.4' @@ -776,7 +776,7 @@ fileName: formatting.yaml description: Formats a table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/formatting.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/formatting.yaml group: Table api_set: ExcelApi: '1.4' @@ -785,7 +785,7 @@ fileName: get-data-from-table.yaml description: Gets data from a table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/get-data-from-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/get-data-from-table.yaml group: Table api_set: ExcelApi: '1.4' @@ -794,7 +794,7 @@ fileName: get-visible-range-of-a-filtered-table.yaml description: Gets the visible range from a filtered table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml group: Table api_set: ExcelApi: '1.4' @@ -803,7 +803,7 @@ fileName: import-json-data.yaml description: Imports JSON data into a table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/import-json-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/import-json-data.yaml group: Table api_set: ExcelApi: '1.4' @@ -812,7 +812,7 @@ fileName: sort-data.yaml description: Sorts the data within a table. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/sort-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/sort-data.yaml group: Table api_set: ExcelApi: '1.4' @@ -821,7 +821,7 @@ fileName: workbook-get-active-cell.yaml description: Gets the active cell of the entire workbook. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-get-active-cell.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-get-active-cell.yaml group: Workbook api_set: ExcelApi: '1.7' @@ -832,7 +832,7 @@ Creates, gets, changes, and deletes settings that are unique to the specific workbook and add-in combination. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/create-get-change-delete-settings.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/create-get-change-delete-settings.yaml group: Workbook api_set: ExcelApi: '1.4' @@ -843,7 +843,7 @@ Demonstrates the calculation APIs of the workbook: events for when the worksheet recalculates and application-level calculation controls. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-calculation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-calculation.yaml group: Workbook api_set: ExcelApi: '1.11' @@ -854,7 +854,7 @@ Creates a new, empty workbook and creates a new workbook by copying an existing one. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/create-workbook.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/create-workbook.yaml group: Workbook api_set: ExcelApi: '1.8' @@ -865,7 +865,7 @@ This sample shows how to apply the cultural settings APIs to help normalize data. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/culture-info.yaml group: Workbook api_set: ExcelApi: '1.11' @@ -876,7 +876,7 @@ This sample shows how to use the read-only cultural settings APIs to retrieve system date and time settings. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info-date-time.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/culture-info-date-time.yaml group: Workbook api_set: ExcelAPI: '1.12' @@ -885,7 +885,7 @@ fileName: data-protection.yaml description: Protects data in a worksheet and the workbook structure. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/data-protection.yaml group: Workbook api_set: ExcelApi: '1.7' @@ -894,7 +894,7 @@ fileName: workbook-save-and-close.yaml description: Saves and closes a workbook. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-save-and-close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-save-and-close.yaml group: Workbook api_set: ExcelAPI: '1.11' @@ -903,7 +903,7 @@ fileName: active-worksheet.yaml description: Gets and sets the active worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/active-worksheet.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/active-worksheet.yaml group: Worksheet api_set: ExcelApi: '1.1' @@ -912,7 +912,7 @@ fileName: add-delete-rename-move-worksheet.yaml description: 'Adds, deletes, renames, and moves a worksheet.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml group: Worksheet api_set: ExcelApi: '1.1' @@ -921,7 +921,7 @@ fileName: worksheet-auto-filter.yaml description: Adds an AutoFilter to a worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-auto-filter.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-auto-filter.yaml group: Worksheet api_set: ExcelApi: '1.9' @@ -930,7 +930,7 @@ fileName: worksheet-copy.yaml description: Copies the active worksheet to the specified location. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-copy.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-copy.yaml group: Worksheet api_set: ExcelApi: '1.7' @@ -939,7 +939,7 @@ fileName: worksheet-find-all.yaml description: Finds cells within a worksheet based on string matching. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-find-all.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-find-all.yaml group: Worksheet api_set: ExcelApi: '1.9' @@ -950,7 +950,7 @@ Freezes columns, rows, and a range of cells. Gets the address of the frozen pane. Unfreezes frozen panes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-freeze-panes.yaml group: Worksheet api_set: ExcelApi: '1.7' @@ -961,7 +961,7 @@ Gets the used range, the entire range of a worksheet, the specified range, and the specified cell. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-range-cell.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-range-cell.yaml group: Worksheet api_set: ExcelApi: '1.4' @@ -970,7 +970,7 @@ fileName: gridlines.yaml description: Hides and shows a worksheet's gridlines. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/gridlines.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/gridlines.yaml group: Worksheet api_set: ExcelApi: '1.8' @@ -979,7 +979,7 @@ fileName: list-worksheets.yaml description: Lists the worksheets in the workbook. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/list-worksheets.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/list-worksheets.yaml group: Worksheet api_set: ExcelApi: '1.1' @@ -988,7 +988,7 @@ fileName: worksheet-page-layout.yaml description: Changes the page layout and other settings for printing a worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-page-layout.yaml group: Worksheet api_set: ExcelApi: '1.9' @@ -997,7 +997,7 @@ fileName: reference-worksheets-by-relative-position.yaml description: Gets a worksheet by using its relative position within the workbook. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml group: Worksheet api_set: ExcelApi: '1.5' @@ -1006,7 +1006,7 @@ fileName: tab-color.yaml description: Gets and sets the tab color of a worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/tab-color.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml group: Worksheet api_set: ExcelApi: '1.7' @@ -1015,7 +1015,7 @@ fileName: worksheet-visibility.yaml description: Hides and unhides a worksheet. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-visibility.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml group: Worksheet api_set: ExcelApi: '1.1' @@ -1024,7 +1024,7 @@ fileName: workbook-insert-external-worksheets.yaml description: Inserts worksheets from another workbook into the current workbook. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml group: Preview APIs api_set: ExcelAPI: '1.13' @@ -1033,7 +1033,7 @@ fileName: performance-optimization.yaml description: Optimizes performance by untracking ranges and turning off screen painting. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/performance-optimization.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml group: Scenarios api_set: ExcelApi: '1.9' @@ -1044,7 +1044,7 @@ Writes data to the workbook, reads and applies basic formatting, and adds a chart bound to that data. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/report-generation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml group: Scenarios api_set: ExcelApi: '1.1' @@ -1053,7 +1053,7 @@ fileName: multiple-property-set.yaml description: Sets multiple properties at once with the API object set() method. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/multiple-property-set.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: ExcelApi: '1.4' @@ -1064,7 +1064,7 @@ Shows how to work with dates by using the Moment JavaScript library with the Moment-MSDate plug-in. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/working-with-dates.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/working-with-dates.yaml group: Scenarios api_set: ExcelApi: '1.4' @@ -1075,7 +1075,7 @@ Uses an exchange rate API to convert currency values based on their original transaction times. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/currency-converter.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/currency-converter.yaml group: Scenarios api_set: ExcelApi: '1.4' @@ -1086,7 +1086,7 @@ Uses range formatting to draw interesting pattern. Contributed by Alexander Zlatkovski. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/patterns.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/patterns.yaml group: Just For Fun api_set: ExcelApi: '1.4' @@ -1097,7 +1097,7 @@ Uses range formatting and external libraries to draw a colorful gradient within a range. Contributed by Alexander Zlatkovski. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/gradient.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/gradient.yaml group: Just For Fun api_set: ExcelApi: '1.4' @@ -1108,7 +1108,7 @@ Uses range formatting to play a "pathfinder game". Contributed by Alexander Zlatkovski. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/path-finder-game.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/path-finder-game.yaml group: Just For Fun api_set: ExcelApi: '1.4' @@ -1117,7 +1117,7 @@ fileName: tetrominos.yaml description: Arrange moving tetromino shapes to form lines. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/tetrominos.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/tetrominos.yaml group: Just For Fun api_set: ExcelApi: '1.9' @@ -1128,7 +1128,7 @@ Uses chart formatting to draw a wheel with changing colors. Contributed by Alexander Zlatkovski. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/color-wheel.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/color-wheel.yaml group: Just For Fun api_set: ExcelApi: '1.4' diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 4fe404814..c1ec4bb7c 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -3,7 +3,7 @@ fileName: roaming-settings.yaml description: 'Gets, sets, and saves add-in roaming settings' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/10-roaming-settings/roaming-settings.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/10-roaming-settings/roaming-settings.yaml group: Roaming Settings api_set: Mailbox: '1.1' @@ -15,7 +15,7 @@ a new one, gets it, removes it, and saves all custom properties back to the item. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/15-item-custom-properties/load-set-get-save.yaml group: Item Custom Properties api_set: Mailbox: '1.1' @@ -24,7 +24,7 @@ fileName: get-selected-data.yaml description: Gets the selected text in the item body or subject in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/get-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/get-selected-data.yaml group: Item Body api_set: Mailbox: '1.1' @@ -33,7 +33,7 @@ fileName: set-selected-data.yaml description: Replaces the selected text in the item body or subject in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/set-selected-data.yaml group: Item Body api_set: Mailbox: '1.1' @@ -42,7 +42,7 @@ fileName: close.yaml description: Closes the item (compose mode) rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/25-item-save-and-close/close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/25-item-save-and-close/close.yaml group: Item Save And Close api_set: Mailbox: '1.3' @@ -51,7 +51,7 @@ fileName: save.yaml description: Saves the item (compose mode) rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/25-item-save-and-close/save.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/25-item-save-and-close/save.yaml group: Item Save And Close api_set: Mailbox: '1.3' @@ -60,7 +60,7 @@ fileName: get-from-message-read.yaml description: Gets who the message is from in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -69,7 +69,7 @@ fileName: get-from-message-compose.yaml description: Gets who the message is from in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml group: Recipients And Attendees api_set: Mailbox: '1.7' @@ -78,7 +78,7 @@ fileName: get-to-message-read.yaml description: Gets the To line recipients of the message in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -87,7 +87,7 @@ fileName: get-set-to-message-compose.yaml description: Gets and sets the To line recipients of the message in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -96,7 +96,7 @@ fileName: get-cc-message-read.yaml description: Gets the Cc line recipients of the message in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -105,7 +105,7 @@ fileName: get-set-cc-message-compose.yaml description: Gets and sets the Cc line recipients of the message in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -114,7 +114,7 @@ fileName: get-set-bcc-message-compose.yaml description: Gets and sets the Bcc line recipients of the message in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -123,7 +123,7 @@ fileName: get-sender-message-read.yaml description: Gets the sender in Message Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -132,7 +132,7 @@ fileName: get-required-attendees-appointment-attendee.yaml description: Gets the required attendees in Appointment Attendee mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -142,7 +142,7 @@ fileName: get-set-required-attendees-appointment-organizer.yaml description: Gets and sets the required attendees in Appointment Organizer mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -151,7 +151,7 @@ fileName: get-optional-attendees-appointment-attendee.yaml description: Gets the optional attendees in Appointment Attendee mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -161,7 +161,7 @@ fileName: get-set-optional-attendees-appointment-organizer.yaml description: Gets and sets the optional attendees in Appointment Organizer mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -170,7 +170,7 @@ fileName: get-organizer-appointment-attendee.yaml description: Gets the organizer in Appointment Attendee mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml group: Recipients And Attendees api_set: Mailbox: '1.1' @@ -179,7 +179,7 @@ fileName: get-organizer-appointment-organizer.yaml description: Gets the organizer in Appointment Organizer mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml group: Recipients And Attendees api_set: Mailbox: '1.7' @@ -190,7 +190,7 @@ Adds different kinds of notification messages, gets all, and replaces and removes an individual notification message. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/35-notifications/add-getall-remove.yaml group: Notifications api_set: Mailbox: '1.3' @@ -201,7 +201,7 @@ Adds, gets, and removes attachments from a message or an appointment in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/attachments-compose.yaml group: Attachments api_set: Mailbox: '1.1' @@ -210,7 +210,7 @@ fileName: get-attachment-content.yaml description: Gets the attachment content. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/get-attachment-content.yaml group: Attachments api_set: Mailbox: '1.8' @@ -219,7 +219,7 @@ fileName: get-attachments-read.yaml description: Gets the attachments of a message or an appointment in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachments-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/get-attachments-read.yaml group: Attachments api_set: Mailbox: '1.1' @@ -228,7 +228,7 @@ fileName: work-with-categories.yaml description: 'Gets, adds, and removes categories assigned to the item.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-categories.yaml group: Categories api_set: Mailbox: '1.8' @@ -237,7 +237,7 @@ fileName: work-with-master-categories.yaml description: 'Gets, adds, and removes categories in the master list for the mailbox.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-master-categories.yaml group: Categories api_set: Mailbox: '1.8' @@ -246,7 +246,7 @@ fileName: get-series-id.yaml description: Gets the series ID. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-series-id.yaml group: Recurrence api_set: Mailbox: '1.7' @@ -255,7 +255,7 @@ fileName: get-recurrence-read.yaml description: Gets the recurrence pattern of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-recurrence-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-recurrence-read.yaml group: Recurrence api_set: Mailbox: '1.7' @@ -264,7 +264,7 @@ fileName: get-set-recurrence-appointment-organizer.yaml description: Gets and sets the recurrence pattern in Appointment Organizer mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml group: Recurrence api_set: Mailbox: '1.7' @@ -273,7 +273,7 @@ fileName: display-existing-appointment.yaml description: Displays existing appointment in a separate window rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-appointment.yaml group: Display Items api_set: Mailbox: '1.9' @@ -282,7 +282,7 @@ fileName: display-existing-message.yaml description: Displays an existing message in a separate window rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-message.yaml group: Display Items api_set: Mailbox: '1.9' @@ -291,7 +291,7 @@ fileName: display-new-appointment.yaml description: Opens a new appointment form with sample content and a few fields populated. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-appointment.yaml group: Display Items api_set: Mailbox: '1.9' @@ -302,7 +302,7 @@ Opens a new message form with a sample content, recipients, and an inline image attachment rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-message.yaml group: Display Items api_set: Mailbox: '1.9' @@ -311,7 +311,7 @@ fileName: display-reply-forms.yaml description: Opens reply and reply-all message forms with sample reply content. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-forms.yaml group: Display Items api_set: Mailbox: '1.9' @@ -320,7 +320,7 @@ fileName: display-reply-with-attachments.yaml description: Opens a reply message forms and adds sample attachments. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-with-attachments.yaml group: Display Items api_set: Mailbox: '1.9' @@ -331,7 +331,7 @@ Gets shared properties for an item, checks delegate permissions and performs an operation as delegate. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + 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' @@ -340,7 +340,7 @@ fileName: get-internet-headers-message-read.yaml description: Gets internet headers on a message in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml + 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: {} - id: outlook-mime-headers-manage-custom-internet-headers-message-compose @@ -348,7 +348,7 @@ fileName: manage-custom-internet-headers-message-compose.yaml description: 'Set, get, and remove custom internet headers on a message in Compose mode.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/70-mime-headers/manage-custom-internet-headers-message-compose.yaml group: Mime Headers api_set: Mailbox: '1.8' @@ -357,7 +357,7 @@ fileName: basic-entities.yaml description: Gets extracted entities. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + 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' @@ -368,7 +368,7 @@ 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/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml + 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' @@ -377,7 +377,7 @@ fileName: selected.yaml description: Gets selected entities and regex matches. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/selected.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/75-entities-and-regex-matches/selected.yaml group: Entities And Regex Matches api_set: Mailbox: '1.6' @@ -388,7 +388,7 @@ Retrieves and displays REST and EWS endpoint URLs and item IDs, and converts item IDs for different protocols. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml + 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 api_set: Mailbox: '1.5' @@ -397,7 +397,7 @@ fileName: user-identity-token.yaml description: Gets a user identity token to use in authentication flows. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml + 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 api_set: Mailbox: '1.1' @@ -408,7 +408,7 @@ Gets a callback token to use for calling outlook services from add-in's backend service. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml + 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' @@ -417,7 +417,7 @@ 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/master/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml + 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' @@ -426,7 +426,7 @@ fileName: make-ews-request-async.yaml description: Gets a message using EWS without any back-end code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/make-ews-request-async.yaml + 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 api_set: Mailbox: '1.1' @@ -435,7 +435,7 @@ fileName: send-message-using-make-ews-request-async.yaml description: Sends a message using EWS without any back-end code. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml + 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 api_set: Mailbox: '1.1' @@ -444,7 +444,7 @@ 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/master/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml + 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' @@ -453,7 +453,7 @@ fileName: get-subject-read.yaml description: Gets the subject of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-subject-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-subject-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -462,7 +462,7 @@ fileName: get-set-subject-compose.yaml description: Gets and sets the subject of an item in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -471,7 +471,7 @@ fileName: get-internet-message-id-read.yaml description: Gets the internet message ID of a message in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -480,7 +480,7 @@ fileName: get-item-class-read.yaml description: Gets the item class of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-class-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -489,7 +489,7 @@ fileName: get-item-type.yaml description: Gets the item type. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-type.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -498,7 +498,7 @@ fileName: get-start-read.yaml description: Gets the start date and time of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-start-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-start-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -507,7 +507,7 @@ fileName: get-set-start-appointment-organizer.yaml description: Gets and sets the start date and time of an appointment in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -516,7 +516,7 @@ fileName: get-end-read.yaml description: Gets the end date and time of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-end-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-end-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -525,7 +525,7 @@ fileName: get-set-end-appointment-organizer.yaml description: Gets and sets the end date and time of an appointment in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -534,7 +534,7 @@ fileName: get-location-read.yaml description: Gets the location of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-location-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-location-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -543,7 +543,7 @@ fileName: get-set-location-appointment-organizer.yaml description: Gets and sets the location of an appointment in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -552,7 +552,7 @@ fileName: get-add-remove-enhancedlocation-appointment.yaml description: 'Gets, adds, and removes locations on an appointment (enhancedLocation API).' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml + 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 api_set: Mailbox: '1.8' @@ -561,7 +561,7 @@ fileName: get-normalized-subject-read.yaml description: Gets the normalized subject of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -570,7 +570,7 @@ fileName: get-conversation-id-message.yaml description: Gets the conversation ID of a message. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -579,7 +579,7 @@ fileName: get-date-time-created-read.yaml description: Gets the creation date and time of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -588,7 +588,7 @@ fileName: get-date-time-modified-read.yaml description: Gets the last-modified date and time of an item in Read mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml group: Other Item APIs api_set: Mailbox: '1.1' @@ -599,7 +599,7 @@ Gets and sets isAllDayEvent and sensitivity properties of an appointment in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml + 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 @@ -608,7 +608,7 @@ fileName: session-data-apis.yaml description: 'Set, get, get all, remove, and clear session data in Compose mode.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/session-data-apis.yaml group: Preview APIs api_set: Mailbox: preview @@ -619,7 +619,7 @@ Check if the client signature is enabled, disable the client signature, get the compose type, and set a signature in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/work-with-client-signatures.yaml group: Preview APIs api_set: Mailbox: preview diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 04fdc6dab..dbcd5e438 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -5,7 +5,7 @@ Executes a basic PowerPoint API call using the "common API" syntax (compatible with Office 2013). rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-common-api-call.yaml group: Basics api_set: Selection: 1.1 @@ -16,7 +16,7 @@ Creates a new, empty presentation and creates a new presentation by copying an existing one. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/create-presentation.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/create-presentation.yaml group: Basics api_set: PowerPoint: 1.1 @@ -25,7 +25,7 @@ fileName: get-slide-metadata.yaml description: 'Gets the title, index, and ID of the selected slide(s).' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/get-slide-metadata.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/get-slide-metadata.yaml group: Basics api_set: {} - id: powerpoint-basics-insert-image @@ -33,7 +33,7 @@ fileName: insert-image.yaml description: Inserts an image to the current slide. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/insert-image.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-image.yaml group: Basics api_set: {} - id: powerpoint-basics-insert-svg @@ -41,7 +41,7 @@ fileName: insert-svg.yaml description: Inserts an SVG image using an XML string. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/insert-svg.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-svg.yaml group: Basics api_set: {} - id: powerpoint-insert-slides @@ -49,7 +49,7 @@ fileName: insert-slides.yaml description: Inserts slides from another PowerPoint file into the current presentation. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/preview-apis/insert-slides.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/insert-slides.yaml group: Preview APIs api_set: PowerPointApi: '1.2' @@ -58,6 +58,6 @@ fileName: searches-wikipedia-api.yaml description: Searches Wikipedia based on the selected text in the presentation. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/scenarios/searches-wikipedia-api.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios api_set: {} diff --git a/playlists/project.yaml b/playlists/project.yaml index afd101f1e..a28427026 100644 --- a/playlists/project.yaml +++ b/playlists/project.yaml @@ -5,7 +5,7 @@ Executes a basic Project API call using the "common API" syntax (compatible with Office 2013). rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/project/basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/project/basics/basic-common-api-call.yaml group: Basics api_set: Selection: 1.1 diff --git a/playlists/word.yaml b/playlists/word.yaml index 76c596d50..8b840332c 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -3,7 +3,7 @@ fileName: basic-api-call.yaml description: Performs a basic Word API call using TypeScript. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/01-basics/basic-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-api-call.yaml group: Basics api_set: WordApi: '1.1' @@ -12,7 +12,7 @@ fileName: basic-api-call-es5.yaml description: Performs a basic Word API call using plain JavaScript & Promises. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/01-basics/basic-api-call-es5.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-api-call-es5.yaml group: Basics api_set: WordApi: '1.1' @@ -23,7 +23,7 @@ Performs a basic Word API call using JavaScript with the "common API" syntax (compatible with Office 2013). rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/01-basics/basic-common-api-call.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-common-api-call.yaml group: Basics api_set: Selection: 1.1 @@ -32,7 +32,7 @@ fileName: insert-and-change-content-controls.yaml description: 'Inserts, updates, and retrieves content controls.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/10-content-controls/insert-and-change-content-controls.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-content-controls.yaml group: Content Controls api_set: WordApi: '1.1' @@ -41,7 +41,7 @@ fileName: insert-and-get-pictures.yaml description: Inserts and gets inline pictures. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/15-images/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/15-images/insert-and-get-pictures.yaml group: Images api_set: WordApi: '1.1' @@ -50,7 +50,7 @@ fileName: insert-list.yaml description: Inserts a new list into the document. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/20-lists/insert-list.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/insert-list.yaml group: Lists api_set: WordApi: '1.3' @@ -59,7 +59,7 @@ fileName: get-paragraph-on-insertion-point.yaml description: Gets the full paragraph containing the insertion point. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml group: Paragraph api_set: WordApi: '1.1' @@ -68,7 +68,7 @@ fileName: insert-line-and-page-breaks.yaml description: Inserts page and line breaks in a document. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-line-and-page-breaks.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-line-and-page-breaks.yaml group: Paragraph api_set: WordApi: '1.2' @@ -77,7 +77,7 @@ fileName: insert-in-different-locations.yaml description: Inserts content at different document locations. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-in-different-locations.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-in-different-locations.yaml group: Paragraph api_set: WordApi: '1.2' @@ -86,7 +86,7 @@ fileName: insert-formatted-text.yaml description: Formats text with pre-built and custom styles. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-formatted-text.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-formatted-text.yaml group: Paragraph api_set: WordApi: '1.1' @@ -95,7 +95,7 @@ fileName: insert-header-and-footer.yaml description: Inserts a header and a footer in the document. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-header-and-footer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-header-and-footer.yaml group: Paragraph api_set: WordApi: '1.1' @@ -104,7 +104,7 @@ fileName: paragraph-properties.yaml description: 'Sets indentation, space between paragraphs, and other paragraph properties.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/paragraph-properties.yaml group: Paragraph api_set: WordApi: '1.2' @@ -113,7 +113,7 @@ fileName: search.yaml description: Shows basic and advanced search capabilities. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/search.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/search.yaml group: Paragraph api_set: WordApi: '1.1' @@ -122,7 +122,7 @@ fileName: get-word-count.yaml description: Counts how many times a word or term appears in the document. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-word-count.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/get-word-count.yaml group: Paragraph api_set: WordApi: '1.1' @@ -131,7 +131,7 @@ fileName: get-built-in-properties.yaml description: Gets built-in document properties. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/get-built-in-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/30-properties/get-built-in-properties.yaml group: Properties api_set: WordApi: '1.1' @@ -140,7 +140,7 @@ fileName: read-write-custom-document-properties.yaml description: Adds and reads custom document properties of different types. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/read-write-custom-document-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/30-properties/read-write-custom-document-properties.yaml group: Properties api_set: WordApi: '1.3' @@ -149,7 +149,7 @@ fileName: scroll-to-range.yaml description: Scrolls to a range with and without selection. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/35-ranges/scroll-to-range.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/scroll-to-range.yaml group: Ranges api_set: WordApi: '1.2' @@ -160,7 +160,7 @@ Splits a paragraph into word ranges and then traverses all the ranges to format each word, producing a "karaoke" effect. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/35-ranges/split-words-of-first-paragraph.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/split-words-of-first-paragraph.yaml group: Ranges api_set: WordApi: '1.3' @@ -169,7 +169,7 @@ fileName: table-cell-access.yaml description: Creates a table and accesses a specific cell. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/40-tables/table-cell-access.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml group: Tables api_set: WordApi: '1.3' @@ -178,7 +178,7 @@ fileName: doc-assembly.yaml description: Composes different parts of a Word document. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/doc-assembly.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/doc-assembly.yaml group: Scenarios api_set: WordApi: '1.1' @@ -187,7 +187,7 @@ fileName: multiple-property-set.yaml description: Sets multiple properties at once with the API object set() method. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/multiple-property-set.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: WordApi: '1.3' diff --git a/view/excel.json b/view/excel.json index 1bac65941..c5df9ebd7 100644 --- a/view/excel.json +++ b/view/excel.json @@ -1,121 +1,121 @@ { - "excel-basics-basic-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/01-basics/basic-api-call.yaml", - "excel-basics-basic-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/01-basics/basic-api-call-es5.yaml", - "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/01-basics/basic-common-api-call.yaml", - "excel-chart-axis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-axis.yaml", - "excel-chart-axis-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-axis-formatting.yaml", - "excel-chart-bubble-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-bubble-chart.yaml", - "excel-chart-create-several-charts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-create-several-charts.yaml", - "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/create-doughnut-chart.yaml", - "excel-chart-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-formatting.yaml", - "excel-chart-legend": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-legend.yaml", - "excel-chart-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-point.yaml", - "excel-chart-series": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series.yaml", - "excel-chart-series-markers": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-markers.yaml", - "excel-chart-series-plotorder": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-series-plotorder.yaml", - "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-title-format.yaml", - "excel-chart-trendlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/10-chart/chart-trendlines.yaml", - "excel-comment-basics": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-basics.yaml", - "excel-comment-mentions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-mentions.yaml", - "excel-comment-replies": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-replies.yaml", - "excel-comment-resolution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/12-comment/comment-resolution.yaml", - "excel-range-conditional-formatting-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml", - "excel-range-conditional-formatting-advanced": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml", - "excel-custom-functions-basic": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/basic-function.yaml", - "excel-custom-functions-volatile": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/volatile-function.yaml", - "excel-custom-functions-streaming": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/streaming-function.yaml", - "excel-custom-functions-web-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/16-custom-functions/web-call-function.yaml", - "excel-custom-xml-parts-create-set-get-and-delete-custom-xml-parts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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/master/private-samples/excel/20-chart/chart-title-ts.yaml", - "excel-data-validation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/22-data-validation/data-validation.yaml", - "excel-document-get-file-in-slices-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/get-file-in-slices-async.yaml", - "excel-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/properties.yaml", - "excel-document-custom-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/26-document/custom-properties.yaml", - "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-chartcollection-added-activated.yaml", - "excel-events-chart-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-chart-activated.yaml", - "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-column-and-row-sort.yaml", - "excel-events-data-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/data-changed.yaml", - "excel-data-change-event-details": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/data-change-event-details.yaml", - "excel-events-disable-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-disable-events.yaml", - "excel-selection-changed-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/selection-changed-events.yaml", - "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/event-worksheet-single-click.yaml", - "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-tablecollection-changed.yaml", - "excel-events-table-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-table-changed.yaml", - "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", - "excel-events-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-worksheet.yaml", - "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/30-events/events-comment-event-handler.yaml", - "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/create-and-remove-named-item.yaml", - "excel-update-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/34-named-item/update-named-item.yaml", - "excel-pivottable-calculations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-calculations.yaml", - "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", - "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", - "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", - "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-slicer.yaml", - "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", - "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-auto-fill.yaml", - "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-copyfrom.yaml", - "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-areas.yaml", - "excel-range-find": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-find.yaml", - "excel-range-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/formatting.yaml", - "excel-range-cell-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/cell-properties.yaml", - "excel-range-hyperlink": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-hyperlink.yaml", - "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/insert-delete-clear-range.yaml", - "excel-outline": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/outline.yaml", - "excel-range-range-relationships": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-relationships.yaml", - "excel-range-remove-duplicates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-remove-duplicates.yaml", - "excel-range-selected-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/selected-range.yaml", - "excel-direct-precedents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/direct-precedents.yaml", - "excel-range-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/style.yaml", - "excel-range-text-orientation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/range-text-orientation.yaml", - "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/dynamic-arrays.yaml", - "excel-range-used-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/used-range.yaml", - "excel-range-values-and-formulas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/42-range/set-get-values.yaml", - "excel-shape-create-and-delete": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-create-and-delete.yaml", - "excel-shape-images": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-images.yaml", - "excel-shape-lines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-lines.yaml", - "excel-shape-move-and-order": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-move-and-order.yaml", - "excel-shape-groups": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-groups.yaml", - "excel-shape-textboxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/44-shape/shape-textboxes.yaml", - "excel-table-add-rows-and-columns-to-a-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/samples/excel/46-table/convert-range-to-table.yaml", - "excel-table-create-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/create-table.yaml", - "excel-table-filter-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/filter-data.yaml", - "excel-table-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/formatting.yaml", - "excel-table-get-data-from-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/get-data-from-table.yaml", - "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", - "excel-table-import-json-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/import-json-data.yaml", - "excel-table-sort-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/46-table/sort-data.yaml", - "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-get-active-cell.yaml", - "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/create-get-change-delete-settings.yaml", - "excel-workbook-calculation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-calculation.yaml", - "excel-workbook-create-workbook": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/create-workbook.yaml", - "excel-culture-info": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info.yaml", - "excel-culture-info-date-time": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/culture-info-date-time.yaml", - "excel-workbook-data-protection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/data-protection.yaml", - "excel-workbook-save-and-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/50-workbook/workbook-save-and-close.yaml", - "excel-worksheet-active-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/active-worksheet.yaml", - "excel-worksheet-add-delete-rename-move-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/add-delete-rename-move-worksheet.yaml", - "excel-worksheet-auto-filter": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-auto-filter.yaml", - "excel-worksheet-copy": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-copy.yaml", - "excel-worksheet-find-all": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-find-all.yaml", - "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-freeze-panes.yaml", - "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-range-cell.yaml", - "excel-worksheet-gridlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/gridlines.yaml", - "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/list-worksheets.yaml", - "excel-worksheet-page-layout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-page-layout.yaml", - "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", - "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/tab-color.yaml", - "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/performance-optimization.yaml", - "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/report-generation.yaml", - "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/multiple-property-set.yaml", - "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/working-with-dates.yaml", - "excel-scenarios-currency-converter": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/90-scenarios/currency-converter.yaml", - "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/patterns.yaml", - "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/gradient.yaml", - "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/path-finder-game.yaml", - "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/tetrominos.yaml", - "excel-just-for-fun-color-wheel": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/excel/99-just-for-fun/color-wheel.yaml" + "excel-basics-basic-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/01-basics/basic-api-call.yaml", + "excel-basics-basic-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/01-basics/basic-api-call-es5.yaml", + "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/01-basics/basic-common-api-call.yaml", + "excel-chart-axis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis.yaml", + "excel-chart-axis-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis-formatting.yaml", + "excel-chart-bubble-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-bubble-chart.yaml", + "excel-chart-create-several-charts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-create-several-charts.yaml", + "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/create-doughnut-chart.yaml", + "excel-chart-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-formatting.yaml", + "excel-chart-legend": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-legend.yaml", + "excel-chart-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-point.yaml", + "excel-chart-series": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series.yaml", + "excel-chart-series-markers": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series-markers.yaml", + "excel-chart-series-plotorder": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series-plotorder.yaml", + "excel-chart-title-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-title-format.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-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", + "excel-custom-functions-volatile": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/volatile-function.yaml", + "excel-custom-functions-streaming": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/streaming-function.yaml", + "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-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-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", + "excel-document-custom-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/26-document/custom-properties.yaml", + "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-chartcollection-added-activated.yaml", + "excel-events-chart-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-chart-activated.yaml", + "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/event-column-and-row-sort.yaml", + "excel-events-data-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/data-changed.yaml", + "excel-data-change-event-details": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/data-change-event-details.yaml", + "excel-events-disable-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-disable-events.yaml", + "excel-selection-changed-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/selection-changed-events.yaml", + "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/event-worksheet-single-click.yaml", + "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-tablecollection-changed.yaml", + "excel-events-table-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-table-changed.yaml", + "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", + "excel-events-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-worksheet.yaml", + "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-comment-event-handler.yaml", + "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/create-and-remove-named-item.yaml", + "excel-update-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/update-named-item.yaml", + "excel-pivottable-calculations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-calculations.yaml", + "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", + "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", + "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", + "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml", + "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", + "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-auto-fill.yaml", + "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-copyfrom.yaml", + "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-areas.yaml", + "excel-range-find": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-find.yaml", + "excel-range-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/formatting.yaml", + "excel-range-cell-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/cell-properties.yaml", + "excel-range-hyperlink": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-hyperlink.yaml", + "excel-range-insert-delete-and-clear-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/insert-delete-clear-range.yaml", + "excel-outline": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/outline.yaml", + "excel-range-range-relationships": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-relationships.yaml", + "excel-range-remove-duplicates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-remove-duplicates.yaml", + "excel-range-selected-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/selected-range.yaml", + "excel-direct-precedents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/direct-precedents.yaml", + "excel-range-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/style.yaml", + "excel-range-text-orientation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-text-orientation.yaml", + "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/dynamic-arrays.yaml", + "excel-range-used-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/used-range.yaml", + "excel-range-values-and-formulas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/set-get-values.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", + "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-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", + "excel-table-filter-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/filter-data.yaml", + "excel-table-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/formatting.yaml", + "excel-table-get-data-from-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/get-data-from-table.yaml", + "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", + "excel-table-import-json-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/import-json-data.yaml", + "excel-table-sort-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/sort-data.yaml", + "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-get-active-cell.yaml", + "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/create-get-change-delete-settings.yaml", + "excel-workbook-calculation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-calculation.yaml", + "excel-workbook-create-workbook": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/create-workbook.yaml", + "excel-culture-info": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/culture-info.yaml", + "excel-culture-info-date-time": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/culture-info-date-time.yaml", + "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-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", + "excel-worksheet-copy": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-copy.yaml", + "excel-worksheet-find-all": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-find-all.yaml", + "excel-worksheet-freeze-panes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-freeze-panes.yaml", + "excel-worksheet-worksheet-range-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-range-cell.yaml", + "excel-worksheet-gridlines": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/gridlines.yaml", + "excel-worksheet-list-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/list-worksheets.yaml", + "excel-worksheet-page-layout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-page-layout.yaml", + "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", + "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml", + "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", + "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", + "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", + "excel-scenarios-working-with-dates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/working-with-dates.yaml", + "excel-scenarios-currency-converter": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/currency-converter.yaml", + "excel-just-for-fun-patterns": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/patterns.yaml", + "excel-just-for-fun-gradient": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/gradient.yaml", + "excel-just-for-fun-path-finder-game": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/path-finder-game.yaml", + "excel-just-for-fun-tetrominos": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/tetrominos.yaml", + "excel-just-for-fun-color-wheel": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/99-just-for-fun/color-wheel.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 52b362f7e..2826b32d8 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -1,69 +1,69 @@ { - "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/10-roaming-settings/roaming-settings.yaml", - "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", - "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/get-selected-data.yaml", - "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/20-item-body/set-selected-data.yaml", - "outlook-item-save-and-close-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/25-item-save-and-close/close.yaml", - "outlook-item-save-and-close-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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/master/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml", - "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", - "outlook-recipients-and-attendees-get-set-to-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml", - "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", - "outlook-recipients-and-attendees-get-set-cc-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml", - "outlook-recipients-and-attendees-get-set-bcc-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml", - "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", - "outlook-recipients-and-attendees-get-required-attendees-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml", - "outlook-recipients-and-attendees-get-set-required-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml", - "outlook-recipients-and-attendees-get-optional-attendees-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml", - "outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml", - "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", - "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", - "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/35-notifications/add-getall-remove.yaml", - "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/attachments-compose.yaml", - "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachment-content.yaml", - "outlook-attachments-get-attachments-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/40-attachments/get-attachments-read.yaml", - "outlook-categories-work-with-categories": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-categories.yaml", - "outlook-categories-work-with-master-categories": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/45-categories/work-with-master-categories.yaml", - "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-series-id.yaml", - "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-recurrence-read.yaml", - "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", - "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-appointment.yaml", - "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-existing-message.yaml", - "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-appointment.yaml", - "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-new-message.yaml", - "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-forms.yaml", - "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/55-display-items/display-reply-with-attachments.yaml", - "outlook-delegates-and-shared-folders-get-shared-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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/master/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/master/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml", - "outlook-entities-and-regex-matches-contextual": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/contextual.yaml", - "outlook-entities-and-regex-matches-selected": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/75-entities-and-regex-matches/selected.yaml", - "outlook-tokens-and-service-calls-ids-and-urls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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/master/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/master/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/master/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/master/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml", - "outlook-tokens-and-service-calls-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/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/master/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml", - "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", - "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-class-read.yaml", - "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-item-type.yaml", - "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-start-read.yaml", - "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", - "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-end-read.yaml", - "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", - "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-location-read.yaml", - "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml", - "outlook-other-item-apis-get-add-remove-enhancedlocation-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", - "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", - "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", - "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", - "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/session-data-apis.yaml", - "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" + "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/10-roaming-settings/roaming-settings.yaml", + "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", + "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/get-selected-data.yaml", + "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/set-selected-data.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-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", + "outlook-recipients-and-attendees-get-to-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml", + "outlook-recipients-and-attendees-get-set-to-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml", + "outlook-recipients-and-attendees-get-cc-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml", + "outlook-recipients-and-attendees-get-set-cc-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml", + "outlook-recipients-and-attendees-get-set-bcc-message-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml", + "outlook-recipients-and-attendees-get-sender-message-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-sender-message-read.yaml", + "outlook-recipients-and-attendees-get-required-attendees-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-set-required-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-optional-attendees-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-optional-attendees-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", + "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", + "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/35-notifications/add-getall-remove.yaml", + "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/attachments-compose.yaml", + "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/get-attachment-content.yaml", + "outlook-attachments-get-attachments-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/get-attachments-read.yaml", + "outlook-categories-work-with-categories": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-categories.yaml", + "outlook-categories-work-with-master-categories": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/45-categories/work-with-master-categories.yaml", + "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-series-id.yaml", + "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-recurrence-read.yaml", + "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", + "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-appointment.yaml", + "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-message.yaml", + "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-appointment.yaml", + "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-message.yaml", + "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-forms.yaml", + "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-with-attachments.yaml", + "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-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-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-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", + "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-read.yaml", + "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-type.yaml", + "outlook-other-item-apis-get-start-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-start-read.yaml", + "outlook-other-item-apis-get-set-start-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml", + "outlook-other-item-apis-get-end-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-end-read.yaml", + "outlook-other-item-apis-get-set-end-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml", + "outlook-other-item-apis-get-location-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-location-read.yaml", + "outlook-other-item-apis-get-set-location-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml", + "outlook-other-item-apis-get-add-remove-enhancedlocation-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml", + "outlook-other-item-apis-get-normalized-subject-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml", + "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", + "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", + "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", + "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/session-data-apis.yaml", + "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index 19371c18e..f19611dfa 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -1,9 +1,9 @@ { - "powerpoint-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/basic-common-api-call.yaml", - "powerpoint-create-presentation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/create-presentation.yaml", - "powerpoint-basics-get-slide-metadata": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/get-slide-metadata.yaml", - "powerpoint-basics-insert-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/insert-image.yaml", - "powerpoint-basics-insert-svg": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/basics/insert-svg.yaml", - "powerpoint-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/preview-apis/insert-slides.yaml", - "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/powerpoint/scenarios/searches-wikipedia-api.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/basics/create-presentation.yaml", + "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-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/insert-slides.yaml", + "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml" } \ No newline at end of file diff --git a/view/project.json b/view/project.json index 79e486bd9..34242cfae 100644 --- a/view/project.json +++ b/view/project.json @@ -1,3 +1,3 @@ { - "project-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/project/basics/basic-common-api-call.yaml" + "project-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/project/basics/basic-common-api-call.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index ea2c51702..d2e57d8e5 100644 --- a/view/word.json +++ b/view/word.json @@ -1,23 +1,23 @@ { - "word-basics-basic-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/01-basics/basic-api-call.yaml", - "word-basics-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/01-basics/basic-api-call-es5.yaml", - "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/01-basics/basic-common-api-call.yaml", - "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/10-content-controls/insert-and-change-content-controls.yaml", - "word-images-insert-and-get-pictures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/15-images/insert-and-get-pictures.yaml", - "word-lists-insert-list": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/20-lists/insert-list.yaml", - "word-paragraph-get-paragraph-on-insertion-point": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/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/master/samples/word/25-paragraph/insert-line-and-page-breaks.yaml", - "word-paragraph-insert-in-different-locations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-in-different-locations.yaml", - "word-paragraph-insert-formatted-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-formatted-text.yaml", - "word-paragraph-insert-header-and-footer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/insert-header-and-footer.yaml", - "word-paragraph-paragraph-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/paragraph-properties.yaml", - "word-paragraph-search": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/search.yaml", - "word-paragraph-get-word-count": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/25-paragraph/get-word-count.yaml", - "word-properties-get-built-in-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/get-built-in-properties.yaml", - "word-properties-read-write-custom-document-properties": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/30-properties/read-write-custom-document-properties.yaml", - "word-ranges-scroll-to-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/35-ranges/scroll-to-range.yaml", - "word-ranges-split-words-of-first-paragraph": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/35-ranges/split-words-of-first-paragraph.yaml", - "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/40-tables/table-cell-access.yaml", - "word-scenarios-doc-assembly": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/doc-assembly.yaml", - "word-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/master/samples/word/90-scenarios/multiple-property-set.yaml" + "word-basics-basic-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-api-call.yaml", + "word-basics-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-api-call-es5.yaml", + "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-common-api-call.yaml", + "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-content-controls.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-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", + "word-paragraph-insert-in-different-locations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-in-different-locations.yaml", + "word-paragraph-insert-formatted-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-formatted-text.yaml", + "word-paragraph-insert-header-and-footer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-header-and-footer.yaml", + "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-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", + "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.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" } \ No newline at end of file From cc6c6cab66eeb83a9ec8504a01ffc76576382068 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Jan 2021 20:33:44 +0000 Subject: [PATCH 003/336] Bump ini from 1.3.5 to 1.3.8 Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8) Signed-off-by: dependabot[bot] --- yarn.lock | 42 +++++------------------------------------- 1 file changed, 5 insertions(+), 37 deletions(-) diff --git a/yarn.lock b/yarn.lock index c8d9f9403..d076946ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -662,7 +662,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -1278,7 +1278,7 @@ import-lazy@^2.1.0: resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -1302,9 +1302,9 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== init-package-json@^1.10.3: version "1.10.3" @@ -1730,11 +1730,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -1743,33 +1738,11 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= - dependencies: - lodash._getnative "^3.0.0" - lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -1780,11 +1753,6 @@ lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" From b9bffa0eb46adbf7382a13a71a220c335433e267 Mon Sep 17 00:00:00 2001 From: Linda Lu Cannon Date: Tue, 19 Jan 2021 09:17:44 -0800 Subject: [PATCH 004/336] Update README.md (#521) --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 64e09f76d..5722c3af0 100644 --- a/README.md +++ b/README.md @@ -136,4 +136,11 @@ A few style rules to observe: > **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. +- [Personalized recommendations](https://developer.microsoft.com/microsoft-365/dev-program#Recommendations) Find developer resources quickly from your personalized dashboard. + 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 30477a680a48aec9e95df8eb760a44018174bf74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Jan 2021 11:08:11 -0800 Subject: [PATCH 005/336] Bump npm-user-validate from 1.0.0 to 1.0.1 (#520) Bumps [npm-user-validate](https://github.com/npm/npm-user-validate) from 1.0.0 to 1.0.1. - [Release notes](https://github.com/npm/npm-user-validate/releases) - [Commits](https://github.com/npm/npm-user-validate/compare/v1.0.0...v1.0.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d076946ff..f8982316c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2086,9 +2086,9 @@ npm-run-path@^2.0.0: path-key "^2.0.0" npm-user-validate@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.0.tgz#8ceca0f5cea04d4e93519ef72d0557a75122e951" - integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" + integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== npm@^6.14.6: version "6.14.8" From c34b862b3678b3bd457d0bd09b22d15688e6d666 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 10 Feb 2021 15:01:53 -0800 Subject: [PATCH 006/336] Update npm version in package.json (#524) * Upgrade npm * Add freeze line --- package.json | 2 +- yarn.lock | 2989 ++++++++++++++++---------------------------------- 2 files changed, 923 insertions(+), 2068 deletions(-) diff --git a/package.json b/package.json index 75dd70328..0c8f5183b 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "js-yaml": "^3.13.1", "lodash": "^4.17.19", "node-status": "^1.0.0", - "npm": "^6.14.6", + "npm": "^7.5.3", "rimraf": "^3.0.0", "shelljs": "^0.8.3" }, diff --git a/yarn.lock b/yarn.lock index f8982316c..3b17023a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,34 +3,165 @@ "@babel/code-frame@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: - "@babel/highlight" "^7.10.4" + "@babel/highlight" "^7.12.13" -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== +"@babel/highlight@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" + integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" js-tokens "^4.0.0" -"@iarna/cli@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" - integrity sha512-ukITQAqVs2n9HGmn3car/Ir7d3ta650iXhrG7pjr3EWdFmJuuOVWgYsu7ftsSe5VifEFFhjxVuX9+8F7L8hwcA== +"@npmcli/arborist@^2.0.0", "@npmcli/arborist@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.2.1.tgz#5fbf3b697f3315be124e3477c17793ad9a68828a" + integrity sha512-J76nY+TYhxNLFAnWy1HqfjszC6dHy5zxHHFt1LJ2pgBDcb00ipNAbTX0qtyv6FPTF67hPErmPKePaKtFr5KvEA== + dependencies: + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/map-workspaces" "^1.0.2" + "@npmcli/metavuln-calculator" "^1.0.1" + "@npmcli/move-file" "^1.1.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^1.0.1" + "@npmcli/run-script" "^1.8.2" + bin-links "^2.2.1" + cacache "^15.0.3" + common-ancestor-path "^1.0.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.1" + mkdirp-infer-owner "^2.0.0" + npm-install-checks "^4.0.0" + npm-package-arg "^8.1.0" + npm-pick-manifest "^6.1.0" + npm-registry-fetch "^9.0.0" + pacote "^11.2.6" + parse-conflict-json "^1.1.1" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.1" + readdir-scoped-modules "^1.1.0" + semver "^7.3.4" + tar "^6.1.0" + treeverse "^1.0.4" + walk-up-path "^1.0.0" + +"@npmcli/ci-detect@^1.0.0", "@npmcli/ci-detect@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" + integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== + +"@npmcli/config@^1.2.9": + version "1.2.9" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-1.2.9.tgz#75bde611c08762ab7a9814c076d7f287ba020088" + integrity sha512-d7mx35ju9HFg0gNHiwMU0HXCJk1esAeRdMktLeD+K2K2awkZyEm1FyX+g8iuZbmWGAaFP/aGiXo7a0lKlmp6Xg== dependencies: - signal-exit "^3.0.2" - update-notifier "^2.2.0" - yargs "^8.0.2" + ini "^2.0.0" + mkdirp-infer-owner "^2.0.0" + nopt "^5.0.0" + semver "^7.3.4" + walk-up-path "^1.0.0" + +"@npmcli/disparity-colors@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-1.0.1.tgz#b23c864c9658f9f0318d5aa6d17986619989535c" + integrity sha512-kQ1aCTTU45mPXN+pdAaRxlxr3OunkyztjbbxDY/aIcPS5CnCUrx+1+NvA6pTcYR7wmLZe37+Mi5v3nfbwPxq3A== + dependencies: + ansi-styles "^4.3.0" + +"@npmcli/git@^2.0.1", "@npmcli/git@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.4.tgz#725f5e32864f3849420e84baf130e426a707cbb7" + integrity sha512-OJZCmJ9DNn1cz9HPXXsPmUBnqaArot3CGYo63CyajHQk+g87rPXVOJByGsskQJhPsUUEXJcsZ2Q6bWd2jSwnBA== + dependencies: + "@npmcli/promise-spawn" "^1.1.0" + lru-cache "^6.0.0" + mkdirp "^1.0.3" + npm-pick-manifest "^6.0.0" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + semver "^7.3.2" + unique-filename "^1.1.1" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.6", "@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.2.tgz#77f2400470cdc1d61731ba34a85c577ade1616b9" + integrity sha512-12nBSZ0EI/jRtCCjjQXF+1Twvj+ecxtBXFRomrTXR0xWn8oppc/OM53aPpPG5EnQWrKAAnOS/hEIATm6kxKz/A== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^7.1.6" + minimatch "^3.0.4" + read-package-json-fast "^2.0.1" + +"@npmcli/metavuln-calculator@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.0.2.tgz#4332b3840c95c1aba1a518bab958cd9c6b870b56" + integrity sha512-mQuOq4sZYOdjz49KH/DUwL+FsLVxiN5KDO/bnBXFon+kUxGHDoUYL+bvOD1o00IYL1q3LtXoPlFlQ+OYJQffhw== + dependencies: + cacache "^15.0.5" + pacote "^11.1.11" + semver "^7.3.2" + +"@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.1.tgz#31a3afae95308ef12f58ac147b3e33aae621241d" + integrity sha512-LtWTicuF2wp7PNTuyCwABx7nNG+DnzSE8gN0iWxkC6mpgm/iOPu0ZMTkXuCxmJxtWFsDxUaixM9COSNJEMUfuQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^1.0.1", "@npmcli/node-gyp@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" + integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== + +"@npmcli/promise-spawn@^1.1.0", "@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" + integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/run-script@^1.3.0", "@npmcli/run-script@^1.8.2": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.3.tgz#07f440ed492400bb1114369bc37315eeaaae2bb3" + integrity sha512-ELPGWAVU/xyU+A+H3pEPj0QOvYwLTX71RArXcClFzeiyJ/b/McsZ+d0QxpznvfFtZzxGN/gz/1cvlqICR4/suQ== + dependencies: + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + infer-owner "^1.0.4" + node-gyp "^7.1.0" + puka "^1.0.1" + read-package-json-fast "^2.0.1" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/chalk@0.4.31": version "0.4.31" @@ -53,14 +184,14 @@ "@types/node" "*" "@types/js-yaml@^3.12.0": - version "3.12.5" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.5.tgz#136d5e6a57a931e1cce6f9d8126aa98a9c92a6bb" - integrity sha512-JCcp6J0GV66Y4ZMDAQCXot4xprYB+Zfd3meK9+INSJeVZwJmHAW30BBEEkPzXswMXuiyReUGOP3GxrADc9wPww== + version "3.12.6" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.6.tgz#7f10c926aa41e189a2755c4c7fcf8e4573bd7ac1" + integrity sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ== "@types/lodash@^4.14.122": - version "4.14.161" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.161.tgz#a21ca0777dabc6e4f44f3d07f37b765f54188b18" - integrity sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA== + version "4.14.168" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== "@types/minimatch@*": version "3.0.3" @@ -68,14 +199,14 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "14.11.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" - integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== + version "14.14.25" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93" + integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ== "@types/node@^11.10.5": - version "11.15.27" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.27.tgz#2473edcb8a9a51e25332dc24692cbce19dc89dc2" - integrity sha512-LbLwyGC/ukDV0EbHFP1OCfs2V5h3vUS8ZXJJjS2L5YYg8rNkJe6Tl/yv+L+g94sbHllyXUCfUCn5+sZLBegvyw== + version "11.15.44" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.44.tgz#5c3463a489ddd6d1d9f6717dff84e15097b0b362" + integrity sha512-fHAcNn2FlzDMA9rV5KP73r1cMZdbommWic2foHAEWoa/LITi91AueHDsJpnqjBEJ7bYoT2WC+KN1RL0vsM20zA== "@types/shelljs@^0.8.3": version "0.8.8" @@ -85,57 +216,45 @@ "@types/glob" "*" "@types/node" "*" -JSONStream@^1.3.4, JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - es6-promisify "^5.0.0" + debug "4" -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +agentkeepalive@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" + integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== dependencies: - es6-promisify "^5.0.0" + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: - humanize-ms "^1.2.1" + clean-stack "^2.0.0" + indent-string "^4.0.0" ajv@^6.12.3: - version "6.12.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" - integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-align@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= - dependencies: - string-width "^2.0.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -146,23 +265,30 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" +ansi-styles@^4.1.0, ansi-styles@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -173,12 +299,12 @@ ansistyles@~0.1.3: resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= -aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -"aproba@^1.1.2 || 2", aproba@^2.0.0: +aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== @@ -231,9 +357,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== balanced-match@^1.0.0: version "1.0.0" @@ -252,17 +378,22 @@ big-integer@^1.6.17: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== -bin-links@^1.1.2, bin-links@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.8.tgz#bd39aadab5dc4bdac222a07df5baf1af745b2228" - integrity sha512-KgmVfx+QqggqP9dA3iIc5pA4T1qEEEL+hOhOhNPaUm77OTrJoOXE/C05SJLNJe6m/2wUK7F1tDSou7n5TfCDzQ== +bin-links@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.2.1.tgz#347d9dbb48f7d60e6c11fe68b77a424bee14d61b" + integrity sha512-wFzVTqavpgCCYAh8SVBdnZdiQMxTkGR+T3b14CNpBXIBe2neJWaMGAZ55XWWHELJJ89dscuq0VCBqcVaIOgCMg== dependencies: - bluebird "^3.5.3" - cmd-shim "^3.0.0" - gentle-fs "^2.3.0" - graceful-fs "^4.1.15" + cmd-shim "^4.0.1" + mkdirp "^1.0.3" npm-normalize-package-bin "^1.0.0" - write-file-atomic "^2.3.0" + read-cmd-shim "^2.0.0" + rimraf "^3.0.0" + write-file-atomic "^3.0.3" + +binary-extensions@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== binary@~0.3.0: version "0.3.0" @@ -272,29 +403,11 @@ binary@~0.3.0: buffers "~0.1.1" chainsaw "~0.1.0" -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bluebird@~3.4.1: version "3.4.7" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= -boxen@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" - integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== - dependencies: - ansi-align "^2.0.0" - camelcase "^4.0.0" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.0.0" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -303,11 +416,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - buffer-indexof-polyfill@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" @@ -333,56 +441,33 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== +byte-size@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" + integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== +cacache@^15.0.3, cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" + rimraf "^3.0.2" + ssri "^8.0.0" + tar "^6.0.2" unique-filename "^1.1.1" - y18n "^4.0.0" - -call-limit@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz#ef15f2670db3f1992557e2d965abc459e6e358d4" - integrity sha512-5twvci5b9eRBw2wCfPtN0GmlR2/gadZqyFpPhOK6CvMFoFgA+USnZ6Jpu1lhG9h85pQ3Ouil3PfXWRD4EUaRiQ== - -camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== caseless@~0.12.0: version "0.12.0" @@ -407,7 +492,7 @@ chalk@1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0: +chalk@^2.0.0, chalk@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -416,6 +501,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + charm@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.1.tgz#68566a7a553d4fe91797030dd1852d0dd6efa82d" @@ -423,32 +516,22 @@ charm@1.0.1: dependencies: inherits "^2.0.1" -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -ci-info@^2.0.0: +chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -cidr-regex@^2.0.10: - version "2.0.10" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz#af13878bd4ad704de77d6dc800799358b3afa70d" - integrity sha512-sB3ogMQXWvreNPbJUZMRApxuRYd+KoIo4RGQ81VatjmMW6WJPo+IJZ2846FGItr9VzKo5w7DXzijPLGtSd0N3Q== +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== dependencies: - ip-regex "^2.1.0" + ip-regex "^4.1.0" -cli-boxes@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-columns@^3.1.2: version "3.1.2" @@ -470,46 +553,27 @@ cli-spinners@0.2.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.2.0.tgz#85078737913b880f6ec9ffe7b65e83ec7776284f" integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= -cli-table3@^0.5.0, cli-table3@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== +cli-table3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== dependencies: object-assign "^4.1.0" - string-width "^2.1.1" + string-width "^4.2.0" optionalDependencies: colors "^1.1.2" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -cmd-shim@^3.0.0, cmd-shim@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" - integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== +cmd-shim@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" + integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== dependencies: - graceful-fs "^4.1.2" - mkdirp "~0.5.0" + mkdirp-infer-owner "^2.0.0" code-point-at@^1.0.0: version "1.1.0" @@ -523,11 +587,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + colors@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -558,89 +634,26 @@ commander@^2.12.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^3.0.0: - version "3.1.5" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" - integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== - dependencies: - dot-prop "^4.2.1" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: +console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -648,40 +661,18 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@4, debug@^4.1.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: - ms "^2.1.1" + ms "2.1.2" debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= -decamelize@^1.1.1, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -689,13 +680,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -706,17 +690,12 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -detect-indent@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -dezalgo@^1.0.0, dezalgo@~1.0.3: +dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= @@ -729,17 +708,10 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dot-prop@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" - integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== - dependencies: - is-obj "^1.0.0" - -dotenv@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" - integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== duplexer2@~0.1.4: version "0.1.4" @@ -748,21 +720,6 @@ duplexer2@~0.1.4: dependencies: readable-stream "^2.0.2" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -771,30 +728,18 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" -editor@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encoding@^0.1.11: +encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - env-paths@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" @@ -805,75 +750,10 @@ err-code@^1.0.0: resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= -errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.0: - version "1.18.0-next.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.0.tgz#b302834927e624d8e5837ed48224291f2c66e6fc" - integrity sha512-elZXTZXKn51hUBdJjSZGYRujuzilgXo8vSPQzjGYXLvSlGiCo8VO8ZGV3kjo9a0WNJJ57hENagwbtlRuHuzkcQ== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" @@ -899,19 +779,6 @@ excel@^1.0.1: xmldom "^0.1.27" xpath "0.0.27" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -942,38 +809,6 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -find-npm-prefix@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz#8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf" - integrity sha512-KEftzJ+H90x6pcKtdXZEPsQse8/y/UnvzRKrOSQFprnrGaFuJ62fVkP34Iu2IYuMvyauCyoLTNkJZgrrGA2wkA== - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -988,22 +823,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -from2@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= - dependencies: - inherits "~2.0.1" - readable-stream "~1.1.10" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -1013,31 +832,12 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: - version "1.2.10" - resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= - dependencies: - graceful-fs "^4.1.2" - path-is-inside "^1.0.1" - rimraf "^2.5.2" - -fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" + minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" @@ -1073,50 +873,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== - -gentle-fs@^2.3.0, gentle-fs@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.1.tgz#11201bf66c18f930ddca72cf69460bdfa05727b1" - integrity sha512-OlwBBwqCFPcjm33rF2BjW+Pr6/ll2741l+xooiwTCeaX2CA1ZuclavyMBe0/KlR21/XGsgY6hzEQZ15BdNa13Q== - dependencies: - aproba "^1.1.2" - chownr "^1.1.2" - cmd-shim "^3.0.3" - fs-vacuum "^1.2.10" - graceful-fs "^4.1.11" - iferr "^0.1.5" - infer-owner "^1.0.4" - mkdirp "^0.5.1" - path-is-inside "^1.0.2" - read-cmd-shim "^1.0.1" - slide "^1.1.6" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -1136,34 +892,10 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.3, graceful-fs@^4.2.5: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== har-schema@^2.0.0: version "2.0.0" @@ -1190,12 +922,12 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-unicode@^2.0.0, has-unicode@~2.0.1: +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= @@ -1207,23 +939,26 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.8: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== +hosted-git-info@^3.0.6, hosted-git-info@^3.0.8: + version "3.0.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" + integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== + dependencies: + lru-cache "^6.0.0" -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: - agent-base "4" - debug "3.1.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" http-signature@~1.2.0: version "1.2.0" @@ -1234,13 +969,13 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: - agent-base "^4.3.0" - debug "^3.1.0" + agent-base "6" + debug "4" humanize-ms@^1.2.1: version "1.2.1" @@ -1256,39 +991,29 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -iferr@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz#e9fde49a9da06dc4a4194c6c9ed6d08305037a6d" - integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== - -ignore-walk@^3.0.1: +ignore-walk@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -infer-owner@^1.0.3, infer-owner@^1.0.4: +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflight@^1.0.4, inflight@~1.0.6: +inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= @@ -1296,28 +1021,28 @@ inflight@^1.0.4, inflight@~1.0.6: 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.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== +init-package-json@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.2.tgz#d81a7e6775af9b618f20bba288e440b8d1ce05f3" + integrity sha512-PO64kVeArePvhX7Ff0jVWkpnE1DfGRvaWcStYrPugcJz9twQGYibagKJuIMHCX7ENcp0M6LJlcjLBuLD5KeJMg== dependencies: glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" + npm-package-arg "^8.1.0" promzard "^0.3.0" read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" + read-package-json "^3.0.0" + semver "^7.3.2" + validate-npm-package-license "^3.0.4" validate-npm-package-name "^3.0.0" interpret@^1.0.0: @@ -1325,49 +1050,29 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== -ip@1.1.5: +ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" - integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== dependencies: - ci-info "^1.5.0" + cidr-regex "^3.1.1" -is-cidr@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" - integrity sha512-Gx+oErgq1j2jAKCR2Kbq0b3wbH0vQKqZ0wOlHxm0o56nq51Cs/DZA8oz9dMDhbHyHEGgJ86eTeVudtgMMOx3Mw== +is-core-module@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== dependencies: - cidr-regex "^2.0.10" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + has "^1.0.3" is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -1381,75 +1086,21 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= - -is-npm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= - -is-obj@^1.0.0: +is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-regex@^1.1.0, is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== - dependencies: - has-symbols "^1.0.1" - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.0.0, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1471,9 +1122,9 @@ js-tokens@^4.0.0: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -1483,12 +1134,7 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -1503,6 +1149,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stringify-nice@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.1.tgz#1377579345c9ac3b0d940c1928af348ff7b42f8b" + integrity sha512-aHOgcSoOLvmFZQMvZ27rFw68r4e9OlQtH7YEcF2u5amVYbF/D3cKBXKCvl5EGhQz2NwJZ6RPfgRX6yNQ+UBKJw== + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -1515,7 +1166,7 @@ jsonfile@^3.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0: +jsonparse@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= @@ -1530,321 +1181,161 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -latest-version@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= - dependencies: - package-json "^4.0.0" - -lazy-property@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -libcipm@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" - integrity sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA== - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.1" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - graceful-fs "^4.1.11" - ini "^1.3.5" - lock-verify "^2.1.0" - mkdirp "^0.5.1" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - pacote "^9.1.0" - read-package-json "^2.0.13" - rimraf "^2.6.2" - worker-farm "^1.6.0" - -libnpm@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz#0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2" - integrity sha512-d7jU5ZcMiTfBqTUJVZ3xid44fE5ERBm9vBnmhp2ECD2Ls+FNXWxHSkO7gtvrnbLO78gwPdNPz1HpsF3W4rjkBQ== - dependencies: - bin-links "^1.1.2" - bluebird "^3.5.3" - find-npm-prefix "^1.0.2" - libnpmaccess "^3.0.2" - libnpmconfig "^1.2.1" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmpublish "^1.1.2" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - lock-verify "^2.0.2" - npm-lifecycle "^3.0.0" - npm-logical-tree "^1.2.1" - npm-package-arg "^6.1.0" - npm-profile "^4.0.2" - npm-registry-fetch "^4.0.0" - npmlog "^4.1.2" - pacote "^9.5.3" - read-package-json "^2.0.13" - stringify-package "^1.0.0" +just-diff-apply@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-3.0.0.tgz#a77348d24f0694e378b57293dceb65bdf5a91c4f" + integrity sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w== -libnpmaccess@^3.0.2: +just-diff@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz#8b2d72345ba3bef90d3b4f694edd5c0417f58923" - integrity sha512-01512AK7MqByrI2mfC7h5j8N9V4I7MHJuk9buo8Gv+5QgThpOgpjB7sQBDDkeZqRteFb1QM/6YNdHfG7cDvfAQ== - dependencies: - aproba "^2.0.0" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-3.0.2.tgz#65f4914e4d7500b364d12b7b3f03bcbacdac743b" + integrity sha512-+EiNvacECnZbszZa5IMjzrJ3dy2HKMXyGaNYWBnXy+iWW+437jIvQUrWaM9M+XI/6gOH8EjqvhGUOSh7ETekyg== -libnpmconfig@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz#c0c2f793a74e67d4825e5039e7a02a0044dfcbc0" - integrity sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA== - dependencies: - figgy-pudding "^3.5.1" - find-up "^3.0.0" - ini "^1.3.5" +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== -libnpmhook@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz#4020c0f5edbf08ebe395325caa5ea01885b928f7" - integrity sha512-UdNLMuefVZra/wbnBXECZPefHMGsVDTq5zaM/LgKNE9Keyl5YXQTnGAzEo+nFOpdRqTWI9LYi4ApqF9uVCCtuA== +libnpmaccess@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.1.tgz#17e842e03bef759854adf6eb6c2ede32e782639f" + integrity sha512-ZiAgvfUbvmkHoMTzdwmNWCrQRsDkOC+aM5BDfO0C9aOSwF3R1LdFDBD+Rer1KWtsoQYO35nXgmMR7OUHpDRxyA== dependencies: aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" + minipass "^3.1.1" + npm-package-arg "^8.0.0" + npm-registry-fetch "^9.0.0" + +libnpmdiff@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.3.tgz#4bfdf3313831d85ead1fb7a0bd2f43cc3408f1f6" + integrity sha512-BgVvJCjd+EGY3Ifb3+gWkZwMjn6kYMtruT88XXOrJCWyjnG5aRdFv3lKuJx5JdU5ku08G5LlY8tOZdfRn72m7w== + dependencies: + "@npmcli/disparity-colors" "^1.0.1" + binary-extensions "^2.2.0" + diff "^5.0.0" + minimatch "^3.0.4" + pacote "^11.2.3" + tar "^6.1.0" -libnpmorg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz#5d2503f6ceb57f33dbdcc718e6698fea6d5ad087" - integrity sha512-0sRUXLh+PLBgZmARvthhYXQAWn0fOsa6T5l3JSe2n9vKG/lCVK4nuG7pDsa7uMq+uTt2epdPK+a2g6btcY11Ww== +libnpmfund@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.0.2.tgz#d9552d4b76dd7f0a1a61b7af6b8f27184e51b0f5" + integrity sha512-Scw2JiLxfT7wqW/VbxIXV8u3FaFT/ZlR8YLFgTdCPsL1Hhli0554ZXyP8JTu1sLeDpHsoqtgLb4mgYVQnqigjA== dependencies: - aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" + "@npmcli/arborist" "^2.0.0" -libnpmpublish@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" - integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== +libnpmhook@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.1.tgz#ef467078b71f6f86199f90e6c86e391588867f09" + integrity sha512-rwiWIWAQ6R5sPFRi9gsSC/+1/BxFlxk5nNQysVTXEHbqM9ds8g/duW79wRbZKnRyK1xyOmafxbj69nt9tcUkyw== dependencies: aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - npm-registry-fetch "^4.0.0" - semver "^5.5.1" - ssri "^6.0.1" - -libnpmsearch@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz#9a4f059102d38e3dd44085bdbfe5095f2a5044cf" - integrity sha512-VTBbV55Q6fRzTdzziYCr64+f8AopQ1YZ+BdPOv16UegIEaE8C0Kch01wo4s3kRTFV64P121WZJwgmBwrq68zYg== - dependencies: - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" + npm-registry-fetch "^9.0.0" -libnpmteam@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz#8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820" - integrity sha512-p420vM28Us04NAcg1rzgGW63LMM6rwe+6rtZpfDxCcXxM0zUTLl7nPFEnRF3JfFBF5skF/yuZDUthTsHgde8QA== +libnpmorg@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.1.tgz#b279b6e0641013ba5dde465476e72624ea8dd2f3" + integrity sha512-Wj0aApN6TfZWHqtJNjkY7IeQpX24jrQD58IHrEz234quKVRYlegUiMsZl2g4OEFeZNSSc9QN28EdI1SBkUlW7g== dependencies: aproba "^2.0.0" - figgy-pudding "^3.4.1" - get-stream "^4.0.0" - npm-registry-fetch "^4.0.0" - -libnpx@^10.2.4: - version "10.2.4" - resolved "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.4.tgz#ef0e3258e29aef2ec7ee3276115e20e67f67d4ee" - integrity sha512-BPc0D1cOjBeS8VIBKUu5F80s6njm0wbVt7CsGMrIcJ+SI7pi7V0uVPGpEMH9H5L8csOcclTxAXFE2VAsJXUhfA== - dependencies: - dotenv "^5.0.1" - npm-package-arg "^6.0.0" - rimraf "^2.6.2" - safe-buffer "^5.1.0" - update-notifier "^2.3.0" - which "^1.3.0" - y18n "^4.0.0" - yargs "^14.2.3" + npm-registry-fetch "^9.0.0" -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= - -load-json-file@^2.0.0: +libnpmpack@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.0.tgz#6b7f050f8dde248776c92495147f623dc711a221" + integrity sha512-w4wB8ZQUceUANUEiSYqi4nHlqFxhzLXWmhVbDt3NlyZVkmblTokR4xK9VfihLXJhdARQxeILx/HxReeqas1KZQ== dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" + "@npmcli/run-script" "^1.3.0" + npm-package-arg "^8.0.0" + pacote "^11.1.4" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== +libnpmpublish@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.0.tgz#ad6413914e0dfd78df868ce14ba3d3a4cc8b385b" + integrity sha512-2RwYXRfZAB1x/9udKpZmqEzSqNd7ouBRU52jyG14/xG8EF+O9A62d7/XVR3iABEQHf1iYhkm0Oq9iXjrL3tsXA== dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" + normalize-package-data "^3.0.0" + npm-package-arg "^8.1.0" + npm-registry-fetch "^9.0.0" + semver "^7.1.3" + ssri "^8.0.0" -lock-verify@^2.0.2, lock-verify@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1" - integrity sha512-n0Zw2DVupKfZMazy/HIFVNohJ1z8fIoZ77WBnyyBGG6ixw83uJNyrbiJvvHWe1QKkGiBCjj8RCPlymltliqEww== +libnpmsearch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.0.tgz#425cc7cd1feeaad7bf109f91f17b697a3a058f9e" + integrity sha512-UQyzQjtAv99kZDuijqTB2Do63qtt+2SKNOVSTnehWTQbxzXF7Jvc8UD3YNPljm8+Y5T31K2AqptbY5BD6XHlIg== dependencies: - "@iarna/cli" "^1.2.0" - npm-package-arg "^6.1.0" - semver "^5.4.1" + npm-registry-fetch "^9.0.0" -lockfile@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" - integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== +libnpmteam@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.2.tgz#8450a77092faa801aaaea2a209a66e2137460c06" + integrity sha512-QGvtbMPdQzK+XybBPK0UjfLEI9fiDPQSFMbZW+2lmm0BgPoqxHle0Wl90bsIyBVY7pYzp45MgMqQNo7KWCLpDA== dependencies: - signal-exit "^3.0.2" + aproba "^2.0.0" + npm-registry-fetch "^9.0.0" -lodash._baseuniq@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= +libnpmversion@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.0.8.tgz#76c1873a3a85aa4f32bcab15317c465ccd016b6f" + integrity sha512-WrLLHx+y+0or9IycspDOWVCMde/NGo1AU97CHidjB7DeOjtbfjCOGwqem8z+WsgCnLHjwcvMaP63l7cJG2i9pg== dependencies: - lodash._createset "~4.0.0" - lodash._root "~3.0.0" - -lodash._createset@~4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= - -lodash._root@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= - -lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.union@~4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@~4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + "@npmcli/git" "^2.0.4" + "@npmcli/run-script" "^1.8.2" + read-package-json-fast "^2.0.1" + semver "^7.3.4" + stringify-package "^1.0.1" -lodash.without@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= lodash@^4.17.19: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-fetch-happen@^8.0.13, make-fetch-happen@^8.0.9: + version "8.0.13" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.13.tgz#3692e1fdf027343c782e53bfe1f941fe85db9462" + integrity sha512-rQ5NijwwdU8tIaBrpTtSVrNCcAJfyDRcKBC76vOQlyJX588/88+TE+UpjWl4BgG7gCkp29wER7xcRqkeg+x64Q== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.0.5" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - -meant@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.2.tgz#5d0c78310a3d8ae1408a16be0fe0bd42a969f560" - integrity sha512-KN+1uowN/NK+sT/Lzx7WSGIj2u+3xe5n2LbwObfjOhPZiA+cCfCm6idVl0RkEfjThkw5XJ96CyRcanq6GmKtUg== - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.45.0: + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== dependencies: - mime-db "1.44.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mime-db "1.45.0" minimatch@^3.0.4: version "3.0.4" @@ -1853,101 +1344,124 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" + minipass "^3.0.0" -minizlib@^1.2.1: +minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" + integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== dependencies: - minipass "^2.9.0" + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: - minimist "^1.2.5" + minipass "^3.0.0" -move-concurrently@^1.0.1: +minipass-json-stream@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" + jsonparse "^1.3.1" + minipass "^3.0.0" -ms@2.0.0: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-infer-owner@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + mkdirp "^1.0.3" -ms@^2.0.0, ms@^2.1.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -node-fetch-npm@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" - integrity sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg== - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-gyp@^5.0.2, node-gyp@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" - integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== +node-gyp@^7.1.0, node-gyp@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" + graceful-fs "^4.2.3" + nopt "^5.0.0" npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" node-status@^1.0.0: version "1.0.0" @@ -1959,257 +1473,176 @@ node-status@^1.0.0: cli-spinners "0.2.0" colors "1.1.2" -nopt@^4.0.1, nopt@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" - osenv "^0.1.4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== +normalize-package-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" + integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" + hosted-git-info "^3.0.6" + resolve "^1.17.0" + semver "^7.3.2" validate-npm-package-license "^3.0.1" -npm-audit-report@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz#8226deeb253b55176ed147592a3995442f2179ed" - integrity sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw== +npm-audit-report@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.4.tgz#b14c4625131fb7bcacc4b1c83842af1f58c92c98" + integrity sha512-Tz7rnfskSdZ0msTzt2mENC/B+H2QI8u0jN0ck7o3zDsQYIQrek/l3MjEc+CARer+64LsVTU6ZIqNuh0X55QPhw== dependencies: - cli-table3 "^0.5.0" - console-control-strings "^1.1.0" + chalk "^4.0.0" -npm-bundled@^1.0.1: +npm-bundled@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== dependencies: npm-normalize-package-bin "^1.0.1" -npm-cache-filename@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= - -npm-install-checks@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" - integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== dependencies: - semver "^2.3.0 || 3.x || 4 || 5" - -npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz#9882d3642b8c82c815782a12e6a1bfeed0026309" - integrity sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g== - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-logical-tree@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" - integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== + semver "^7.1.1" npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" - integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.0.tgz#b5f6319418c3246a1c38e1a8fbaa06231bc5308f" + integrity sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig== dependencies: - hosted-git-info "^2.7.1" - osenv "^0.1.5" - semver "^5.6.0" + hosted-git-info "^3.0.6" + semver "^7.0.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.12, npm-packlist@^1.4.8: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== +npm-packlist@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.4.tgz#40e96b2b43787d0546a574542d01e066640d09da" + integrity sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw== dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - -npm-profile@^4.0.2, npm-profile@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz#28ee94390e936df6d084263ee2061336a6a1581b" - integrity sha512-Ta8xq8TLMpqssF0H60BXS1A90iMoM6GeKwsmravJ6wYjWwSzcYBTdyWa3DZCYqPutacBMEm7cxiOkiIeCUAHDQ== - dependencies: - aproba "^1.1.2 || 2" - figgy-pudding "^3.4.1" - npm-registry-fetch "^4.0.0" - -npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz#57951bf6541e0246b34c9f9a38ab73607c9449d7" - integrity sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ== - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.2.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz#2befed87b0fce956790f62d32afb56d7539c022a" + integrity sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw== dependencies: - path-key "^2.0.0" + npm-install-checks "^4.0.0" + npm-package-arg "^8.0.0" + semver "^7.0.0" -npm-user-validate@~1.0.0: +npm-profile@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.2.tgz#4cff0710ac8d71280202b6c261b160cc0cace16a" + integrity sha512-hOhpH23PeWUFParJ6T1nquiHJLmFZ5VReTjBf1TJpl1YGuqfUS+ZYujVYPfuMbixosO82kWzvnxg4ZmP4VkTeg== + dependencies: + npm-registry-fetch "^9.0.0" + +npm-registry-fetch@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" + integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== + dependencies: + "@npmcli/ci-detect" "^1.0.0" + lru-cache "^6.0.0" + make-fetch-happen "^8.0.9" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + +npm-user-validate@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== -npm@^6.14.6: - version "6.14.8" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.8.tgz#64ef754345639bc035982ec3f609353c8539033c" - integrity sha512-HBZVBMYs5blsj94GTeQZel7s9odVuuSUHy1+AlZh7rPVux1os2ashvEGLy/STNK7vUjbrCg5Kq9/GXisJgdf6A== +npm@^7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/npm/-/npm-7.5.3.tgz#85959d5c3dc02cfb56ab479d801a1d6a0c55c4bc" + integrity sha512-4MhBvHrQ82v5cvoWe7tX+IK8Z2xsbde9IS9sCP3SKpRo4JOHxe14tpZ/ZOTCy8xkp0DhBYqjxECmWv2EZK8BXg== dependencies: - JSONStream "^1.3.5" + "@npmcli/arborist" "^2.2.1" + "@npmcli/ci-detect" "^1.2.0" + "@npmcli/config" "^1.2.9" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/run-script" "^1.8.2" abbrev "~1.1.1" ansicolors "~0.3.2" ansistyles "~0.1.3" - aproba "^2.0.0" archy "~1.0.0" - bin-links "^1.1.8" - bluebird "^3.5.5" - byte-size "^5.0.1" - cacache "^12.0.3" - call-limit "^1.1.1" - chownr "^1.1.4" - ci-info "^2.0.0" + byte-size "^7.0.0" + cacache "^15.0.5" + chalk "^4.1.0" + chownr "^2.0.0" cli-columns "^3.1.2" - cli-table3 "^0.5.1" - cmd-shim "^3.0.3" + cli-table3 "^0.6.0" columnify "~1.5.4" - config-chain "^1.1.12" - detect-indent "~5.0.0" - detect-newline "^2.1.0" - dezalgo "~1.0.3" - editor "~1.0.0" - figgy-pudding "^3.5.1" - find-npm-prefix "^1.0.2" - fs-vacuum "~1.2.10" - fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.3.1" - glob "^7.1.6" - graceful-fs "^4.2.4" - has-unicode "~2.0.1" - hosted-git-info "^2.8.8" - iferr "^1.0.2" - infer-owner "^1.0.4" - inflight "~1.0.6" - inherits "^2.0.4" - ini "^1.3.5" - init-package-json "^1.10.3" - is-cidr "^3.0.0" - json-parse-better-errors "^1.0.2" - lazy-property "~1.0.0" - libcipm "^4.0.8" - libnpm "^3.0.1" - libnpmaccess "^3.0.2" - libnpmhook "^5.0.3" - libnpmorg "^1.0.1" - libnpmsearch "^2.0.2" - libnpmteam "^1.0.2" - libnpx "^10.2.4" - lock-verify "^2.1.0" - lockfile "^1.0.4" - lodash._baseuniq "~4.6.0" - lodash.clonedeep "~4.5.0" - lodash.union "~4.6.0" - lodash.uniq "~4.5.0" - lodash.without "~4.4.0" - lru-cache "^5.1.1" - meant "^1.0.2" - mississippi "^3.0.0" - mkdirp "^0.5.5" - move-concurrently "^1.0.1" - node-gyp "^5.1.0" - nopt "^4.0.3" - normalize-package-data "^2.5.0" - npm-audit-report "^1.3.3" - npm-cache-filename "~1.0.2" - npm-install-checks "^3.0.2" - npm-lifecycle "^3.1.5" - npm-package-arg "^6.1.1" - npm-packlist "^1.4.8" - npm-pick-manifest "^3.0.2" - npm-profile "^4.0.4" - npm-registry-fetch "^4.0.7" - npm-user-validate "~1.0.0" + glob "^7.1.4" + graceful-fs "^4.2.5" + hosted-git-info "^3.0.8" + ini "^2.0.0" + init-package-json "^2.0.2" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + leven "^3.1.0" + libnpmaccess "^4.0.1" + libnpmdiff "^2.0.3" + libnpmfund "^1.0.2" + libnpmhook "^6.0.1" + libnpmorg "^2.0.1" + libnpmpack "^2.0.0" + libnpmpublish "^4.0.0" + libnpmsearch "^3.1.0" + libnpmteam "^2.0.2" + libnpmversion "^1.0.8" + make-fetch-happen "^8.0.13" + minipass "^3.1.3" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^7.1.2" + nopt "^5.0.0" + npm-audit-report "^2.1.4" + npm-package-arg "^8.1.0" + npm-pick-manifest "^6.1.0" + npm-profile "^5.0.2" + npm-registry-fetch "^9.0.0" + npm-user-validate "^1.0.1" npmlog "~4.1.2" - once "~1.4.0" - opener "^1.5.1" - osenv "^0.1.5" - pacote "^9.5.12" - path-is-inside "~1.0.2" - promise-inflight "~1.0.1" + opener "^1.5.2" + pacote "^11.2.6" + parse-conflict-json "^1.1.1" qrcode-terminal "^0.12.0" - query-string "^6.8.2" - qw "~1.0.1" read "~1.0.7" - read-cmd-shim "^1.0.5" - read-installed "~4.0.3" - read-package-json "^2.1.1" - read-package-tree "^5.3.1" - readable-stream "^3.6.0" + read-package-json "^3.0.0" + read-package-json-fast "^2.0.1" readdir-scoped-modules "^1.1.0" - request "^2.88.0" - retry "^0.12.0" - rimraf "^2.7.1" - safe-buffer "^5.1.2" - semver "^5.7.1" - sha "^3.0.0" - slide "~1.1.6" - sorted-object "~2.0.1" - sorted-union-stream "~2.1.3" - ssri "^6.0.1" - stringify-package "^1.0.1" - tar "^4.4.13" + rimraf "^3.0.2" + semver "^7.3.4" + ssri "^8.0.1" + tar "^6.1.0" text-table "~0.2.0" tiny-relative-date "^1.3.0" - uid-number "0.0.6" - umask "~1.1.0" - unique-filename "^1.1.1" - unpipe "~1.0.0" - update-notifier "^2.5.0" - uuid "^3.3.3" - validate-npm-package-license "^3.0.4" + treeverse "^1.0.4" + uuid "^8.3.1" validate-npm-package-name "~3.0.0" - which "^1.3.1" - worker-farm "^1.7.0" - write-file-atomic "^2.4.3" + which "^2.0.2" + write-file-atomic "^3.0.3" npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" @@ -2236,35 +1669,7 @@ object-assign@^4.1.0: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-inspect@^1.7.0, object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" - integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.0" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -2276,195 +1681,67 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= -opener@^1.5.1: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4, osenv@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= - dependencies: - got "^6.7.1" - registry-auth-token "^3.0.1" - registry-url "^3.0.3" - semver "^5.1.0" - -pacote@^9.1.0, pacote@^9.5.12, pacote@^9.5.3: - version "9.5.12" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz#1e11dd7a8d736bcc36b375a9804d41bb0377bf66" - integrity sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ== - dependencies: - bluebird "^3.5.3" - cacache "^12.0.2" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.3" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +pacote@^11.1.11, pacote@^11.1.4, pacote@^11.2.3, pacote@^11.2.6: + version "11.2.6" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.2.6.tgz#c0426e5d5c8d33aeea3461a75e1390f1ba78f953" + integrity sha512-xCl++Hb3aBC7LaWMimbO4xUqZVsEbKDVc6KKDIIyAeBYrmMwY1yJC2nES/lsGd8sdQLUosgBxQyuVNncZ2Ru0w== + dependencies: + "@npmcli/git" "^2.0.1" + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^1.8.2" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.4.0" - npm-normalize-package-bin "^1.0.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.1.12" - npm-pick-manifest "^3.0.0" - npm-registry-fetch "^4.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.2" - safe-buffer "^5.1.2" - semver "^5.6.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^2.1.4" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^9.0.0" + promise-retry "^2.0.1" + read-package-json-fast "^2.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.0" + +parse-conflict-json@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" + integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== dependencies: - error-ex "^1.2.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + json-parse-even-better-errors "^2.3.0" + just-diff "^3.0.1" + just-diff-apply "^3.0.0" path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" @@ -2475,7 +1752,17 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise-inflight@^1.0.1, promise-inflight@~1.0.1: +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= @@ -2488,6 +1775,14 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" @@ -2495,57 +1790,15 @@ promzard@^0.3.0: dependencies: read "1" -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== - dependencies: - genfun "^5.0.0" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" +puka@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/puka/-/puka-1.0.1.tgz#a2df782b7eb4cf9564e4c93a5da422de0dfacc02" + integrity sha512-ssjRZxBd7BT3dte1RR3VoeT2cT/ODH8x+h0rUF1rMqB0srHYf48stSDWfiYakTp5UBZMxroZhB2+ExLDHm7W3g== punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" @@ -2562,87 +1815,29 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^6.8.2: - version "6.13.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.4.tgz#b35a9a3bd4955bce55f94feb0e819b3d0be6f66f" - integrity sha512-E2NPIeJoBEJGQNy3ib1k/Z/OkDBUKIo8IV2ZVwbKfoa65IS9unqWWUlLcbfU70Da0qNoxUZZA8CfKUjKLE641Q== - dependencies: - decode-uri-component "^0.2.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - -qw@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz#efbfdc740f9ad054304426acb183412cc8b996d4" - integrity sha1-77/cdA+a0FQwRCassYNBLMi5ltQ= - -rc@^1.0.1, rc@^1.1.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" - integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== - dependencies: - graceful-fs "^4.1.2" +read-cmd-shim@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" + integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-installed@~4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= +read-package-json-fast@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.1.tgz#c767f6c634873ffb6bb73788191b65559734f555" + integrity sha512-bp6z0tdgLy9KzdfENDIw/53HWAolOVoQTRWXv7PUiqAo3YvvoUVeLr7RWPWq+mu7KUOu9kiT4DvxhUgNUBsvug== dependencies: - debuglog "^1.0.1" - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - semver "2 || 3 || 4 || 5" - slide "~1.1.3" - util-extend "^1.0.1" - optionalDependencies: - graceful-fs "^4.1.2" + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" - integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== +read-package-json@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-3.0.0.tgz#2219328e77c9be34f035a4ce58d1fb8e2979adf9" + integrity sha512-4TnJZ5fnDs+/3deg1AuMExL4R1SFNRLQeOhV9c8oDKm3eoG6u8xU0r0mNNRJHi3K6B+jXmT7JOhwhAklWw9SSQ== dependencies: glob "^7.1.1" json-parse-even-better-errors "^2.3.0" - normalize-package-data "^2.0.0" + normalize-package-data "^3.0.0" npm-normalize-package-bin "^1.0.0" -read-package-tree@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read@1, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -2650,7 +1845,7 @@ read@1, read@~1.0.1, read@~1.0.7: dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -2663,25 +1858,6 @@ read@1, read@~1.0.1, read@~1.0.7: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.1.10: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@~2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" @@ -2695,7 +1871,7 @@ readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -2712,22 +1888,7 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -registry-auth-token@^3.0.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== - dependencies: - rc "^1.1.6" - safe-buffer "^5.0.1" - -registry-url@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= - dependencies: - rc "^1.0.1" - -request@^2.88.0: +request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -2753,31 +1914,12 @@ request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== +resolve@^1.1.6, resolve@^1.17.0, resolve@^1.3.2: + version "1.19.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: + is-core-module "^2.1.0" path-parse "^1.0.6" restore-cursor@^1.0.1: @@ -2798,28 +1940,21 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= -rimraf@2, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -2834,19 +1969,19 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: +semver@^5.3.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -set-blocking@^2.0.0, set-blocking@~2.0.0: +semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -2856,25 +1991,6 @@ setimmediate@~1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -sha@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz#b2f2f90af690c16a3a839a6a6c680ea51fedd1ae" - integrity sha512-DOYnM37cNsLNSGIG/zZWch5CKIRNoLdYUQTQlcgkRkoYIUwDYjqDyye16YcDZg/OPdcbUgTKMjc4SY6TB7ZAPw== - dependencies: - graceful-fs "^4.1.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shelljs@^0.8.3: version "0.8.4" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" @@ -2889,45 +2005,28 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= - smart-buffer@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== +socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== dependencies: - agent-base "~4.2.1" - socks "~2.3.2" + agent-base "6" + debug "4" + socks "^2.3.3" -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== +socks@^2.3.3: + version "2.5.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.1.tgz#7720640b6b5ec9a07d556419203baa3f0596df5f" + integrity sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ== dependencies: - ip "1.1.5" + ip "^1.1.5" smart-buffer "^4.1.0" -sorted-object@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= - -sorted-union-stream@~2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= - dependencies: - from2 "^1.3.0" - stream-iterate "^1.1.0" - spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -2950,14 +2049,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" - integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== sprintf-js@~1.0.2: version "1.0.3" @@ -2979,38 +2073,12 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-iterate@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= - dependencies: - readable-stream "^2.1.5" - stream-shift "^1.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + minipass "^3.1.1" string-width@^1.0.1: version "1.0.2" @@ -3021,7 +2089,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -3029,37 +2097,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" string_decoder@~0.10.x: version "0.10.31" @@ -3073,7 +2118,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-package@^1.0.0, stringify-package@^1.0.1: +stringify-package@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== @@ -3092,27 +2137,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: - ansi-regex "^4.1.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + ansi-regex "^5.0.0" supports-color@^2.0.0: version "2.0.0" @@ -3126,49 +2156,30 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + has-flag "^4.0.0" -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= +tar@^6.0.2, tar@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" + integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== dependencies: - execa "^0.7.0" + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -"through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" @@ -3187,10 +2198,15 @@ tough-cookie@~2.5.0: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= +treeverse@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" + integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== + tslib@^1.13.0, tslib@^1.8.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslint@^6.1.0: version "6.1.3" @@ -3230,25 +2246,17 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" typescript@^3.3.3333: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= - -umask@^1.1.0, umask@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + version "3.9.9" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" + integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== unique-filename@^1.1.1: version "1.1.1" @@ -3264,28 +2272,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - unzipper@^0.8.11: version "0.8.14" resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" @@ -3301,58 +2292,28 @@ unzipper@^0.8.11: readable-stream "~2.1.5" setimmediate "~1.0.4" -update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" - integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== - dependencies: - boxen "^1.2.1" - chalk "^2.0.1" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-ci "^1.0.10" - is-installed-globally "^0.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util-extend@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= - -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= - dependencies: - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -3377,6 +2338,11 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + wcwidth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -3384,15 +2350,10 @@ wcwidth@^1.0.0: dependencies: defaults "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9, which@^1.3.0, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== +which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" @@ -3403,55 +2364,20 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -worker-farm@^1.6.0, worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== +write-file-atomic@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" + is-typedarray "^1.0.0" signal-exit "^3.0.2" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + typedarray-to-buffer "^3.1.5" xmldom@^0.1.27: version "0.1.31" @@ -3463,78 +2389,7 @@ xpath@0.0.27: resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -y18n@^4.0.0: +yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= - dependencies: - camelcase "^4.1.0" - -yargs@^14.2.3: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 2fe6c22f5925d4ab4d6668206ce0a2eddf12d1aa Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Sat, 6 Mar 2021 20:10:02 -0800 Subject: [PATCH 007/336] shows how to use the SlideCollection.add method --- package-lock.json | 2515 +++++++++++++++++ playlists-prod/powerpoint.yaml | 23 +- playlists/powerpoint.yaml | 21 +- .../powerpoint/preview-apis/add-slides.yaml | 109 + .../insert-slides.yaml | 4 +- snippet-extractor-metadata/powerpoint.xlsx | Bin 11742 -> 11821 bytes snippet-extractor-output/snippets.yaml | 2 +- view-prod/powerpoint.json | 5 +- view/powerpoint.json | 5 +- 9 files changed, 2664 insertions(+), 20 deletions(-) create mode 100644 package-lock.json create mode 100644 samples/powerpoint/preview-apis/add-slides.yaml rename samples/powerpoint/{preview-apis => slide-management}/insert-slides.yaml (98%) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..8f09b255a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2515 @@ +{ + "name": "office-js-snippets", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", + "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@types/chalk": { + "version": "0.4.31", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", + "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", + "dev": true + }, + "@types/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/js-yaml": { + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.6.tgz", + "integrity": "sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.168", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", + "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "11.15.47", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.47.tgz", + "integrity": "sha512-S4vrkrslntCM+1cw9Q27M/doWQrZklb9lOyo4b+K27SOo5jZYEKY5epdixySx7OI+A67DMJ8W/XBiLMBiI452A==", + "dev": true + }, + "@types/shelljs": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.8.tgz", + "integrity": "sha512-lD3LWdg6j8r0VRBFahJVaxoW0SIcswxKaFUrmKl33RJVeeoNYQAz4uqCJ5Z6v4oIBOsC5GozX+I5SorIKiTcQA==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-indexof-polyfill": { + "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-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "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" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "charm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", + "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", + "requires": { + "inherits": "^2.0.1" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-spinners": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", + "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "commander": { + "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==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "escape-string-regexp": { + "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": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "excel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/excel/-/excel-1.0.1.tgz", + "integrity": "sha512-Hr9p8R/rqZqMrqLa4OHP405BEFKG9Bg2W8Sb4YqRJJP70/lDJbJHZWY4E1wYI9qyavOjp3kheOSM7EzCYcU1nA==", + "requires": { + "unzipper": "^0.8.11", + "xmldom": "^0.1.27", + "xpath": "0.0.27" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "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": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "node-status": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", + "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", + "requires": { + "charm": "1.0.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "0.2.0", + "colors": "1.1.2" + } + }, + "npm": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-7.6.1.tgz", + "integrity": "sha512-L9xChb/o6XOYqTEBK+5+T3ph5Q7eCDYuY6Wz5a0s+I+hfMy5L2Kj8t4P5zsP2qJVts0etAx9MHD1meiApvtb9A==", + "requires": { + "@npmcli/arborist": "^2.2.6", + "@npmcli/ci-detect": "^1.2.0", + "@npmcli/config": "^1.2.9", + "@npmcli/run-script": "^1.8.3", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "archy": "~1.0.0", + "byte-size": "^7.0.0", + "cacache": "^15.0.5", + "chalk": "^4.1.0", + "chownr": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.6.0", + "columnify": "~1.5.4", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "hosted-git-info": "^3.0.8", + "ini": "^2.0.0", + "init-package-json": "^2.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "leven": "^3.1.0", + "libnpmaccess": "^4.0.1", + "libnpmdiff": "^2.0.3", + "libnpmfund": "^1.0.2", + "libnpmhook": "^6.0.1", + "libnpmorg": "^2.0.1", + "libnpmpack": "^2.0.1", + "libnpmpublish": "^4.0.0", + "libnpmsearch": "^3.1.0", + "libnpmteam": "^2.0.2", + "libnpmversion": "^1.0.11", + "make-fetch-happen": "^8.0.14", + "minipass": "^3.1.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^7.1.2", + "nopt": "^5.0.0", + "npm-audit-report": "^2.1.4", + "npm-package-arg": "^8.1.1", + "npm-pick-manifest": "^6.1.0", + "npm-profile": "^5.0.2", + "npm-registry-fetch": "^9.0.0", + "npm-user-validate": "^1.0.1", + "npmlog": "~4.1.2", + "opener": "^1.5.2", + "pacote": "^11.2.7", + "parse-conflict-json": "^1.1.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^3.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "ssri": "^8.0.1", + "tar": "^6.1.0", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^1.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^2.0.2", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "@npmcli/arborist": { + "version": "2.2.6", + "bundled": true, + "requires": { + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^1.0.2", + "@npmcli/metavuln-calculator": "^1.1.0", + "@npmcli/move-file": "^1.1.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^1.0.1", + "@npmcli/run-script": "^1.8.2", + "bin-links": "^2.2.1", + "cacache": "^15.0.3", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.1", + "mkdirp-infer-owner": "^2.0.0", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npm-pick-manifest": "^6.1.0", + "npm-registry-fetch": "^9.0.0", + "pacote": "^11.2.6", + "parse-conflict-json": "^1.1.1", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "semver": "^7.3.4", + "tar": "^6.1.0", + "treeverse": "^1.0.4", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/ci-detect": { + "version": "1.3.0", + "bundled": true + }, + "@npmcli/config": { + "version": "1.2.9", + "bundled": true, + "requires": { + "ini": "^2.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "semver": "^7.3.4", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/disparity-colors": { + "version": "1.0.1", + "bundled": true, + "requires": { + "ansi-styles": "^4.3.0" + } + }, + "@npmcli/git": { + "version": "2.0.6", + "bundled": true, + "requires": { + "@npmcli/promise-spawn": "^1.1.0", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.3", + "npm-pick-manifest": "^6.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.2", + "unique-filename": "^1.1.1", + "which": "^2.0.2" + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "bundled": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/map-workspaces": { + "version": "1.0.3", + "bundled": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^7.1.6", + "minimatch": "^3.0.4", + "read-package-json-fast": "^2.0.1" + } + }, + "@npmcli/metavuln-calculator": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cacache": "^15.0.5", + "pacote": "^11.1.11", + "semver": "^7.3.2" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "bundled": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "bundled": true + }, + "@npmcli/node-gyp": { + "version": "1.0.2", + "bundled": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "bundled": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.3", + "bundled": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "infer-owner": "^1.0.4", + "node-gyp": "^7.1.0", + "puka": "^1.0.1", + "read-package-json-fast": "^2.0.1" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "bundled": true + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "agent-base": { + "version": "6.0.2", + "bundled": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.1.4", + "bundled": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "bundled": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "bundled": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "4.3.0", + "bundled": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "2.0.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.11.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "2.2.1", + "bundled": true, + "requires": { + "cmd-shim": "^4.0.1", + "mkdirp": "^1.0.3", + "npm-normalize-package-bin": "^1.0.0", + "read-cmd-shim": "^2.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^3.0.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "builtins": { + "version": "1.0.3", + "bundled": true + }, + "byte-size": { + "version": "7.0.0", + "bundled": true + }, + "cacache": { + "version": "15.0.5", + "bundled": true, + "requires": { + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.0", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "chalk": { + "version": "4.1.0", + "bundled": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "2.0.0", + "bundled": true + }, + "cidr-regex": { + "version": "3.1.1", + "bundled": true, + "requires": { + "ip-regex": "^4.1.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "bundled": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.6.0", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "bundled": true + }, + "string-width": { + "version": "4.2.0", + "bundled": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "4.1.0", + "bundled": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "color-convert": { + "version": "2.0.1", + "bundled": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "bundled": true + }, + "colors": { + "version": "1.4.0", + "bundled": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.8", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "common-ancestor-path": { + "version": "1.0.1", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.1", + "bundled": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "depd": { + "version": "1.1.2", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff": { + "version": "5.0.0", + "bundled": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.13", + "bundled": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "env-paths": { + "version": "2.2.0", + "bundled": true + }, + "err-code": { + "version": "2.0.3", + "bundled": true + }, + "extend": { + "version": "3.0.2", + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "bundled": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.3", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-minipass": { + "version": "2.1.0", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "function-bind": { + "version": "1.1.1", + "bundled": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "requires": { + "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": { + "version": "4.2.6", + "bundled": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + }, + "har-validator": { + "version": "5.1.5", + "bundled": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "bundled": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "3.0.8", + "bundled": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "bundled": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "bundled": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.2", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "indent-string": { + "version": "4.0.0", + "bundled": true + }, + "infer-owner": { + "version": "1.0.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true + }, + "ini": { + "version": "2.0.0", + "bundled": true + }, + "init-package-json": { + "version": "2.0.2", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^8.1.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^3.0.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + } + }, + "ip": { + "version": "1.1.5", + "bundled": true + }, + "ip-regex": { + "version": "4.3.0", + "bundled": true + }, + "is-cidr": { + "version": "4.0.2", + "bundled": true, + "requires": { + "cidr-regex": "^3.1.1" + } + }, + "is-core-module": { + "version": "2.2.0", + "bundled": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "is-lambda": { + "version": "1.0.1", + "bundled": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "bundled": true + }, + "json-stringify-nice": { + "version": "1.1.1", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "just-diff": { + "version": "3.0.2", + "bundled": true + }, + "just-diff-apply": { + "version": "3.0.0", + "bundled": true + }, + "leven": { + "version": "3.1.0", + "bundled": true + }, + "libnpmaccess": { + "version": "4.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.0.0", + "npm-registry-fetch": "^9.0.0" + } + }, + "libnpmdiff": { + "version": "2.0.3", + "bundled": true, + "requires": { + "@npmcli/disparity-colors": "^1.0.1", + "binary-extensions": "^2.2.0", + "diff": "^5.0.0", + "minimatch": "^3.0.4", + "pacote": "^11.2.3", + "tar": "^6.1.0" + } + }, + "libnpmfund": { + "version": "1.0.2", + "bundled": true, + "requires": { + "@npmcli/arborist": "^2.0.0" + } + }, + "libnpmhook": { + "version": "6.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^9.0.0" + } + }, + "libnpmorg": { + "version": "2.0.1", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^9.0.0" + } + }, + "libnpmpack": { + "version": "2.0.1", + "bundled": true, + "requires": { + "@npmcli/run-script": "^1.8.3", + "npm-package-arg": "^8.1.0", + "pacote": "^11.2.6" + } + }, + "libnpmpublish": { + "version": "4.0.0", + "bundled": true, + "requires": { + "normalize-package-data": "^3.0.0", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.0" + } + }, + "libnpmsearch": { + "version": "3.1.0", + "bundled": true, + "requires": { + "npm-registry-fetch": "^9.0.0" + } + }, + "libnpmteam": { + "version": "2.0.2", + "bundled": true, + "requires": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^9.0.0" + } + }, + "libnpmversion": { + "version": "1.0.11", + "bundled": true, + "requires": { + "@npmcli/git": "^2.0.6", + "@npmcli/run-script": "^1.8.3", + "read-package-json-fast": "^2.0.1", + "semver": "^7.3.4", + "stringify-package": "^1.0.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-fetch-happen": { + "version": "8.0.14", + "bundled": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "mime-db": { + "version": "1.45.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.28", + "bundled": true, + "requires": { + "mime-db": "1.45.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.1.3", + "bundled": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.3.3", + "bundled": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "bundled": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "bundled": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "bundled": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "bundled": true + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "bundled": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } + }, + "ms": { + "version": "2.1.3", + "bundled": true + }, + "mute-stream": { + "version": "0.0.8", + "bundled": true + }, + "node-gyp": { + "version": "7.1.2", + "bundled": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + } + }, + "nopt": { + "version": "5.0.0", + "bundled": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "3.0.0", + "bundled": true, + "requires": { + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-audit-report": { + "version": "2.1.4", + "bundled": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "bundled": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true + }, + "npm-package-arg": { + "version": "8.1.1", + "bundled": true, + "requires": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "2.1.4", + "bundled": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.0", + "bundled": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.0.0", + "semver": "^7.0.0" + } + }, + "npm-profile": { + "version": "5.0.2", + "bundled": true, + "requires": { + "npm-registry-fetch": "^9.0.0" + } + }, + "npm-registry-fetch": { + "version": "9.0.0", + "bundled": true, + "requires": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.1", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.2", + "bundled": true + }, + "p-map": { + "version": "4.0.0", + "bundled": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "pacote": { + "version": "11.2.7", + "bundled": true, + "requires": { + "@npmcli/git": "^2.0.1", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^9.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "parse-conflict-json": { + "version": "1.1.1", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "just-diff": "^3.0.1", + "just-diff-apply": "^3.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true + }, + "promise-all-reject-late": { + "version": "1.0.1", + "bundled": true + }, + "promise-call-limit": { + "version": "1.0.1", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "2.0.1", + "bundled": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + }, + "psl": { + "version": "1.8.0", + "bundled": true + }, + "puka": { + "version": "1.0.1", + "bundled": true + }, + "punycode": { + "version": "2.1.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "2.0.0", + "bundled": true + }, + "read-package-json": { + "version": "3.0.1", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-json-fast": { + "version": "2.0.2", + "bundled": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "bundled": true, + "requires": { + "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-scoped-modules": { + "version": "1.1.0", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "request": { + "version": "2.88.2", + "bundled": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "bundled": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "resolve": { + "version": "1.20.0", + "bundled": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "3.0.2", + "bundled": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "semver": { + "version": "7.3.4", + "bundled": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.3", + "bundled": true + }, + "smart-buffer": { + "version": "4.1.0", + "bundled": true + }, + "socks": { + "version": "2.5.1", + "bundled": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.0", + "bundled": true, + "requires": { + "agent-base": "6", + "debug": "4", + "socks": "^2.3.3" + } + }, + "spdx-correct": { + "version": "3.1.1", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "bundled": true + }, + "sshpk": { + "version": "1.16.1", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "bundled": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.1", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "bundled": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tar": { + "version": "6.1.0", + "bundled": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "treeverse": { + "version": "1.0.4", + "bundled": true + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "bundled": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "unique-filename": { + "version": "1.1.1", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "uri-js": { + "version": "4.4.1", + "bundled": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "uuid": { + "version": "3.4.0", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "walk-up-path": { + "version": "1.0.0", + "bundled": true + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "2.0.2", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "3.0.3", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "yallist": { + "version": "4.0.0", + "bundled": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "requires": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "typescript": { + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", + "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unzipper": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", + "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", + "requires": { + "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.10", + "listenercount": "~1.0.1", + "readable-stream": "~2.1.5", + "setimmediate": "~1.0.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xmldom": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", + "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" + }, + "xpath": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", + "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" + } + } +} diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index c03e47889..d8d7c042c 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -44,15 +44,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-svg.yaml group: Basics api_set: {} -- id: powerpoint-insert-slides - name: Insert slides from other presentation - fileName: insert-slides.yaml - description: Inserts slides from another PowerPoint file into the current presentation. +- id: powerpoint-add-slides + name: Adds slides to a presentation + fileName: add-slides.yaml + description: Add a slide and optionally specify the slide master and layout. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/insert-slides.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/add-slides.yaml group: Preview APIs api_set: - PowerPointApi: '1.2' + PowerPointApi: '1.3' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml @@ -60,4 +60,13 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios - api_set: {} \ No newline at end of file + api_set: {} +- id: powerpoint-insert-slides + name: Insert slides from other presentation + fileName: insert-slides.yaml + description: Inserts slides from another PowerPoint file into the current presentation. + rawUrl: >- + 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 diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index dbcd5e438..dc18b1647 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -44,15 +44,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-svg.yaml group: Basics api_set: {} -- id: powerpoint-insert-slides - name: Insert slides from other presentation - fileName: insert-slides.yaml - description: Inserts slides from another PowerPoint file into the current presentation. +- id: powerpoint-add-slides + name: Adds slides to a presentation + fileName: add-slides.yaml + description: Add a slide and optionally specify the slide master and layout. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/insert-slides.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/add-slides.yaml group: Preview APIs api_set: - PowerPointApi: '1.2' + PowerPointApi: '1.3' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml @@ -61,3 +61,12 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml group: Scenarios api_set: {} +- id: powerpoint-insert-slides + name: Insert slides from other presentation + fileName: insert-slides.yaml + description: Inserts slides from another PowerPoint file into the current presentation. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/insert-slides.yaml + group: Slide Management + api_set: + PowerPointApi: '1.2' diff --git a/samples/powerpoint/preview-apis/add-slides.yaml b/samples/powerpoint/preview-apis/add-slides.yaml new file mode 100644 index 000000000..751a5e948 --- /dev/null +++ b/samples/powerpoint/preview-apis/add-slides.yaml @@ -0,0 +1,109 @@ +id: powerpoint-add-slides +name: Adds slides to a presentation +description: Add a slide and optionally specify the slide master and layout. +host: POWERPOINT +api_set: + PowerPointApi: '1.3' +script: + content: | + $("#slide-masters").click(() => tryCatch(logSlideMasters)); + $("#add-slide").click(() => tryCatch(addSlide)); + + async function addSlide() { + const chosenMaster = $("#master-id").val() as string; + const chosenLayout = $("#layout-id").val() as string; + + await PowerPoint.run(async function(context) { + context.presentation.slides.add({ + slideMasterId: chosenMaster, + layoutId: chosenLayout + }); + await context.sync(); + }); + } + + async function logSlideMasters() { + await PowerPoint.run(async function(context) { + const slideMasters = context.presentation.slideMasters.load("id, name, layouts/items/name, layouts/items/id"); + + await context.sync(); + + 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); + 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); + } + } + }); + } + + /** 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 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 +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/powerpoint/preview-apis/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml similarity index 98% rename from samples/powerpoint/preview-apis/insert-slides.yaml rename to samples/powerpoint/slide-management/insert-slides.yaml index 46e95e32e..227c5f59c 100644 --- a/samples/powerpoint/preview-apis/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -124,8 +124,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/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 66944e6037bcd31e3f542aeecd735cc872fa78e7..8d5332e28bb276d312eb804874e05086be5afc76 100644 GIT binary patch delta 4061 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/insert-slides.yaml + 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(); diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 20db96652..a7050c6ce 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -4,6 +4,7 @@ "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-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/insert-slides.yaml", - "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/scenarios/searches-wikipedia-api.yaml" + "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/add-slides.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" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index f19611dfa..02ca3347e 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -4,6 +4,7 @@ "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-insert-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/insert-slides.yaml", - "powerpoint-scenarios-searches-wikipedia-api": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/scenarios/searches-wikipedia-api.yaml" + "powerpoint-add-slides": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/add-slides.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" } \ No newline at end of file From 3e692d68c9a5e8ecd36fb9451c6e52d41c623660 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 8 Mar 2021 11:52:28 -0800 Subject: [PATCH 008/336] [Excel] Update the add file from base64 snippet (#526) * Update the add file from base64 snippet * Update excel.xlsx and run yarn start again * Adjust whitespace * Update comments * Adjust whitespace * Update samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Adjust comment Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../workbook-insert-external-worksheets.yaml | 25 ++++--- snippet-extractor-metadata/excel.xlsx | Bin 22626 -> 23120 bytes snippet-extractor-output/snippets.yaml | 66 ++++++++++-------- 3 files changed, 51 insertions(+), 40 deletions(-) diff --git a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index c6000cd21..629474f5e 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -15,21 +15,26 @@ script: reader.onload = (event) => { Excel.run((context) => { - // strip off the metadata before the base64-encoded string + // Remove the metadata before the base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); const workbookContents = reader.result.toString().substr(startIndex + 7); - - const sheets = context.workbook.worksheets; - sheets.addFromBase64( - workbookContents, - null, // get all the worksheets - Excel.WorksheetPositionType.end // insert them after the current workbook's worksheets - ); + + // Retrieve the workbook. + const workbook = context.workbook; + + // Set up the insert options. + var 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 workbook. + workbook.insertWorksheetsFromBase64(workbookContents, options); return context.sync(); }); }; - // read in the file as a data URL so we can parse the base64-encoded string + // Read the file as a data URL so that we can parse the base64-encoded string. reader.readAsDataURL(myFile.files[0]); } @@ -81,4 +86,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/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index f46a80d40a59fcaab9dbff3a8bb34409185c699f..c291a121a3b5b54dac462db738a2910562011721 100644 GIT binary patch delta 11410 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 a|H13j6yGBL_iCKiJNpd?RIT~n)Bgib9Ojb% diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7af8440c2..021018b9c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4253,6 +4253,42 @@ textbox.textFrame.deleteText(); await context.sync(); }); +'Excel.Workbook#insertWorksheetsFromBase64:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + + const myFile = document.getElementById("file"); + + const reader = new FileReader(); + + + reader.onload = (event) => { + Excel.run((context) => { + // Remove the metadata before the base64-encoded string. + const startIndex = reader.result.toString().indexOf("base64,"); + const workbookContents = reader.result.toString().substr(startIndex + 7); + + // Retrieve the workbook. + const workbook = context.workbook; + + // Set up the insert options. + var 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 workbook. + workbook.insertWorksheetsFromBase64(workbookContents, options); + return context.sync(); + }); + }; + + + // Read the file as a data URL so that we can parse the base64-encoded + string. + + reader.readAsDataURL(myFile.files[0]); 'Excel.Workbook#properties:member': - >- // Link to full sample: @@ -4784,36 +4820,6 @@ await context.sync(); console.log("A handler has been registered for the OnDeactivate event."); }); -'Excel.WorksheetCollection#addFromBase64:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml - - const myFile = document.getElementById("file"); - - const reader = new FileReader(); - - - reader.onload = (event) => { - Excel.run((context) => { - // strip off the metadata before the base64-encoded string - const startIndex = reader.result.toString().indexOf("base64,"); - const workbookContents = reader.result.toString().substr(startIndex + 7); - - const sheets = context.workbook.worksheets; - sheets.addFromBase64( - workbookContents, - null, // get all the worksheets - Excel.WorksheetPositionType.end // insert them after the current workbook's worksheets - ); - return context.sync(); - }); - }; - - - // read in the file as a data URL so we can parse the base64-encoded string - - reader.readAsDataURL(myFile.files[0]); 'Excel.WorksheetCollection#getFirst:member(1)': - >- // Link to full sample: From 411afe166f7c25ec7132180943174d4deda3cc07 Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Mon, 8 Mar 2021 13:20:17 -0800 Subject: [PATCH 009/336] Apply suggestions from code review Co-authored-by: Elizabeth Samuel --- samples/powerpoint/preview-apis/add-slides.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/samples/powerpoint/preview-apis/add-slides.yaml b/samples/powerpoint/preview-apis/add-slides.yaml index 751a5e948..34ce0bacd 100644 --- a/samples/powerpoint/preview-apis/add-slides.yaml +++ b/samples/powerpoint/preview-apis/add-slides.yaml @@ -1,6 +1,6 @@ id: powerpoint-add-slides -name: Adds slides to a presentation -description: Add a slide and optionally specify the slide master and layout. +name: Add slides to a presentation +description: Adds a slide and optionally specifies the slide master and layout. host: POWERPOINT api_set: PowerPointApi: '1.3' @@ -59,7 +59,7 @@ template:

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 + href="https://support.microsoft.com/office/dc684a1d-9d14-4ead-9bb5-2303d4fedba8">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.

@@ -67,7 +67,7 @@ template: Add slide -

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.

+

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.

@@ -106,4 +106,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 From c7c0d2c7fe0c0c5a4fe1108e221de9054e95170d Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Mon, 8 Mar 2021 13:24:58 -0800 Subject: [PATCH 010/336] rerun yarn start after review changes --- playlists-prod/powerpoint.yaml | 4 ++-- playlists/powerpoint.yaml | 4 ++-- snippet-extractor-output/snippets.yaml | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index d8d7c042c..db975ce24 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -45,9 +45,9 @@ group: Basics api_set: {} - id: powerpoint-add-slides - name: Adds slides to a presentation + name: Add slides to a presentation fileName: add-slides.yaml - description: Add a slide and optionally specify the slide master and layout. + 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 diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index dc18b1647..8fdf0e2c3 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -45,9 +45,9 @@ group: Basics api_set: {} - id: powerpoint-add-slides - name: Adds slides to a presentation + name: Add slides to a presentation fileName: add-slides.yaml - description: Add a slide and optionally specify the slide master and layout. + 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7813bd91a..266169cbe 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9271,6 +9271,23 @@ }); await context.sync(); }); +'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 + + const chosenMaster = $("#master-id").val() as string; + + const chosenLayout = $("#layout-id").val() as string; + + + await PowerPoint.run(async function(context) { + context.presentation.slides.add({ + slideMasterId: chosenMaster, + layoutId: chosenLayout + }); + await context.sync(); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: From 1f22b4219b6244e783ade0eccea159fff848bce1 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 14 Apr 2021 16:15:12 -0700 Subject: [PATCH 011/336] [Excel] (Events) Add formula changed preview snippet (#529) * Add formula changed snippet to preview folder * Update formula changed snippet * Tweak formula changed sample * Add new formula change snippet to excel.xlsx metadata file * Update helpers.ts to ignore .DS_Store macOS files when making sure files match naming guidelines * Run yarn start * Change order number to 3 to avoid conflict with PivotLayout sample * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- config/helpers.ts | 33 +++-- playlists-prod/excel.yaml | 9 ++ playlists/excel.yaml | 9 ++ .../events-formula-changed.yaml | 131 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 23120 -> 23191 bytes snippet-extractor-output/snippets.yaml | 35 +++++ view-prod/excel.json | 1 + view/excel.json | 1 + 8 files changed, 202 insertions(+), 17 deletions(-) create mode 100644 samples/excel/85-preview-apis/events-formula-changed.yaml diff --git a/config/helpers.ts b/config/helpers.ts index 3f3818666..9b9982875 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -196,21 +196,22 @@ export function getFiles(root: string): SnippetFileInput[] { // Helper function syncRecurseThroughDirectory(dir: string) { fs.readdirSync(dir) - .forEach(file => { - const fullPath = path.join(dir, file); - const withoutExt = file.replace('.yaml', ''); - - /* Check for file/folder naming guidelines */ - if (!followsNamingGuidelines(withoutExt)) { - throw new Error(`Invalid name at ${chalk.bold.red(fullPath)}. Name must only contain lowercase letters, numbers, and hyphens.`); - } - - if (fs.statSync(fullPath).isDirectory()) { - syncRecurseThroughDirectory(fullPath); - } else { - files.push(getFileMetadata(fullPath, root)); - } - }); + .filter(file => !['.DS_Store'].includes(file)) + .forEach(file => { + const fullPath = path.join(dir, file); + const withoutExt = file.replace('.yaml', ''); + + /* Check for file/folder naming guidelines */ + if (!followsNamingGuidelines(withoutExt)) { + throw new Error(`Invalid name at ${chalk.bold.red(fullPath)}. Name must only contain lowercase letters, numbers, and hyphens.`); + } + + if (fs.statSync(fullPath).isDirectory()) { + syncRecurseThroughDirectory(fullPath); + } else { + files.push(getFileMetadata(fullPath, root)); + } + }); } } @@ -218,14 +219,12 @@ export function getFiles(root: string): SnippetFileInput[] { Naming guidelines: only allow lowercase letters, numbers, and hyphens OK: - sample sample-with-hyphen sample-es5 BAD: - sample with space Any-uppercase anyWhere diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 048384e78..5d80e9fb6 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1028,6 +1028,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-events-formula-changed + name: Formula change event + fileName: events-formula-changed.yaml + description: Registers an event handler to detect changes to formulas. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 31ed335b1..0a962af27 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1028,6 +1028,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-events-formula-changed + name: Formula change event + fileName: events-formula-changed.yaml + description: Registers an event handler to detect changes to formulas. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-formula-changed.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/events-formula-changed.yaml b/samples/excel/85-preview-apis/events-formula-changed.yaml new file mode 100644 index 000000000..7094aa14d --- /dev/null +++ b/samples/excel/85-preview-apis/events-formula-changed.yaml @@ -0,0 +1,131 @@ +order: 3 +id: excel-events-formula-changed +name: Formula change event +description: Registers an event handler to detect changes to formulas. +host: EXCEL +api_set: + ExcelAPI: '1.13' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#register-formula-change-handler").click(() => tryCatch(registerFormulaChangeHandler)); + $("#trigger-formula-change").click(() => tryCatch(triggerFormulaChange)); + + async function registerFormulaChangeHandler() { + await Excel.run(async (context) => { + // Retrieve the worksheet named "Sample". + let sheet = context.workbook.worksheets.getItem("Sample"); + + // Register the formula changed event handler for this worksheet. + sheet.onFormulaChanged.add(formulaChangeHandler); + await context.sync(); + + console.log("Registered a formula changed event handler for this worksheet."); + }); + } + + async function formulaChangeHandler(event: Excel.WorksheetFormulaChangedEventArgs) { + await Excel.run(async (context) => { + // Retrieve details about the formula change event. + const cellAddress = event.formulaDetails[0].cellAddress; + const previousFormula = event.formulaDetails[0].previousFormula; + const source = event.source; + + // Print out the change event details. + console.log( + `The formula in cell ${cellAddress} changed. + The previous formula was: ${previousFormula}. + The source of the change was: ${source}.` + ); + }); + } + + async function triggerFormulaChange() { + await Excel.run(async (context) => { + // Retrieve the worksheet and choose a range to edit. + let sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("D1"); + + // Change the formula in the chosen range. + range.formulas = [["=A1 * C1"]]; + await context.sync(); + + console.log(`The new formula is: ${range.formulas}`); + }); + } + + async function setup() { + await Excel.run(async (context) => { + // Delete "Sample" worksheet, if it already exists. + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + + // Add a worksheet named "Sample". + const sheet = context.workbook.worksheets.add("Sample"); + + // Retrieve the range. + const range = sheet.getRange("A1:D1"); + + // Add sample data to the range. + range.formulas = [["2", "4", "24", "=A1 * B1"]]; + + 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 register a formula changed event handler and detect details about the changed formula.

+
+
+

Try it out

+

Set up the worksheet.

+ +

Register the formula changed event handler to this worksheet.

+ +

Trigger a change to the formula in cell D1. Watch the console to see details about the change event.

+ +
+ 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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index c291a121a3b5b54dac462db738a2910562011721..bef7011f769163b27fd61e99b369bd9f1e3c0321 100644 GIT binary patch delta 11190 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 delta 11135 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ab2cbd31c..1a5750aa8 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4577,6 +4577,41 @@ await context.sync(); }); +'Excel.Worksheet#onFormulaChanged:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml + + await Excel.run(async (context) => { + // Retrieve the worksheet named "Sample". + let sheet = context.workbook.worksheets.getItem("Sample"); + + // Register the formula changed event handler for this worksheet. + sheet.onFormulaChanged.add(formulaChangeHandler); + await context.sync(); + + console.log("Registered a formula changed event handler for this worksheet."); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml + + async function formulaChangeHandler(event: + Excel.WorksheetFormulaChangedEventArgs) { + await Excel.run(async (context) => { + // Retrieve details about the formula change event. + const cellAddress = event.formulaDetails[0].cellAddress; + const previousFormula = event.formulaDetails[0].previousFormula; + const source = event.source; + + // Print out the change event details. + console.log( + `The formula in cell ${cellAddress} changed. + The previous formula was: ${previousFormula}. + The source of the change was: ${source}.` + ); + }); + } 'Excel.Worksheet#showOutlineLevels:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 0bf88c1a4..d16d7f1d0 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -108,6 +108,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index c5df9ebd7..bde1c7cda 100644 --- a/view/excel.json +++ b/view/excel.json @@ -108,6 +108,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-formula-changed.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 95e0ca6e7d818cd221af05bd41f78de597a311be Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 14 Apr 2021 16:27:26 -0700 Subject: [PATCH 012/336] [excel] (PivotTable) PivotLayout samples (#530) * PivotLayout samples * Adjust comment grammar * Grammar fix * Apply suggestions from code review Co-authored-by: Alison McKay * Clarifying alt text position * Better metadata sorting Co-authored-by: Alison McKay --- package-lock.json | 2515 ----------------- playlists-prod/excel.yaml | 9 + playlists/excel.yaml | 9 + .../pivottable-create-and-modify.yaml | 2 +- .../pivottable-pivotlayout.yaml | 323 +++ snippet-extractor-metadata/excel.xlsx | Bin 23191 -> 23616 bytes snippet-extractor-output/snippets.yaml | 1854 ++++++------ view-prod/excel.json | 1 + view/excel.json | 1 + 9 files changed, 1374 insertions(+), 3340 deletions(-) delete mode 100644 package-lock.json create mode 100644 samples/excel/85-preview-apis/pivottable-pivotlayout.yaml diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 8f09b255a..000000000 --- a/package-lock.json +++ /dev/null @@ -1,2515 +0,0 @@ -{ - "name": "office-js-snippets", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", - "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", - "dev": true - }, - "@types/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/js-yaml": { - "version": "3.12.6", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.6.tgz", - "integrity": "sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "11.15.47", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.47.tgz", - "integrity": "sha512-S4vrkrslntCM+1cw9Q27M/doWQrZklb9lOyo4b+K27SOo5jZYEKY5epdixySx7OI+A67DMJ8W/XBiLMBiI452A==", - "dev": true - }, - "@types/shelljs": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.8.tgz", - "integrity": "sha512-lD3LWdg6j8r0VRBFahJVaxoW0SIcswxKaFUrmKl33RJVeeoNYQAz4uqCJ5Z6v4oIBOsC5GozX+I5SorIKiTcQA==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-indexof-polyfill": { - "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-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "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" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "charm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", - "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", - "requires": { - "inherits": "^2.0.1" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-spinners": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", - "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, - "commander": { - "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==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "escape-string-regexp": { - "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": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "excel": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/excel/-/excel-1.0.1.tgz", - "integrity": "sha512-Hr9p8R/rqZqMrqLa4OHP405BEFKG9Bg2W8Sb4YqRJJP70/lDJbJHZWY4E1wYI9qyavOjp3kheOSM7EzCYcU1nA==", - "requires": { - "unzipper": "^0.8.11", - "xmldom": "^0.1.27", - "xpath": "0.0.27" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "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": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "requires": { - "has": "^1.0.3" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "node-status": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", - "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", - "requires": { - "charm": "1.0.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "0.2.0", - "colors": "1.1.2" - } - }, - "npm": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/npm/-/npm-7.6.1.tgz", - "integrity": "sha512-L9xChb/o6XOYqTEBK+5+T3ph5Q7eCDYuY6Wz5a0s+I+hfMy5L2Kj8t4P5zsP2qJVts0etAx9MHD1meiApvtb9A==", - "requires": { - "@npmcli/arborist": "^2.2.6", - "@npmcli/ci-detect": "^1.2.0", - "@npmcli/config": "^1.2.9", - "@npmcli/run-script": "^1.8.3", - "abbrev": "~1.1.1", - "ansicolors": "~0.3.2", - "ansistyles": "~0.1.3", - "archy": "~1.0.0", - "byte-size": "^7.0.0", - "cacache": "^15.0.5", - "chalk": "^4.1.0", - "chownr": "^2.0.0", - "cli-columns": "^3.1.2", - "cli-table3": "^0.6.0", - "columnify": "~1.5.4", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "hosted-git-info": "^3.0.8", - "ini": "^2.0.0", - "init-package-json": "^2.0.2", - "is-cidr": "^4.0.2", - "json-parse-even-better-errors": "^2.3.1", - "leven": "^3.1.0", - "libnpmaccess": "^4.0.1", - "libnpmdiff": "^2.0.3", - "libnpmfund": "^1.0.2", - "libnpmhook": "^6.0.1", - "libnpmorg": "^2.0.1", - "libnpmpack": "^2.0.1", - "libnpmpublish": "^4.0.0", - "libnpmsearch": "^3.1.0", - "libnpmteam": "^2.0.2", - "libnpmversion": "^1.0.11", - "make-fetch-happen": "^8.0.14", - "minipass": "^3.1.3", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "ms": "^2.1.2", - "node-gyp": "^7.1.2", - "nopt": "^5.0.0", - "npm-audit-report": "^2.1.4", - "npm-package-arg": "^8.1.1", - "npm-pick-manifest": "^6.1.0", - "npm-profile": "^5.0.2", - "npm-registry-fetch": "^9.0.0", - "npm-user-validate": "^1.0.1", - "npmlog": "~4.1.2", - "opener": "^1.5.2", - "pacote": "^11.2.7", - "parse-conflict-json": "^1.1.1", - "qrcode-terminal": "^0.12.0", - "read": "~1.0.7", - "read-package-json": "^3.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "ssri": "^8.0.1", - "tar": "^6.1.0", - "text-table": "~0.2.0", - "tiny-relative-date": "^1.3.0", - "treeverse": "^1.0.4", - "validate-npm-package-name": "~3.0.0", - "which": "^2.0.2", - "write-file-atomic": "^3.0.3" - }, - "dependencies": { - "@npmcli/arborist": { - "version": "2.2.6", - "bundled": true, - "requires": { - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^1.0.2", - "@npmcli/metavuln-calculator": "^1.1.0", - "@npmcli/move-file": "^1.1.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^1.0.1", - "@npmcli/run-script": "^1.8.2", - "bin-links": "^2.2.1", - "cacache": "^15.0.3", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.1", - "mkdirp-infer-owner": "^2.0.0", - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.1.0", - "npm-pick-manifest": "^6.1.0", - "npm-registry-fetch": "^9.0.0", - "pacote": "^11.2.6", - "parse-conflict-json": "^1.1.1", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "semver": "^7.3.4", - "tar": "^6.1.0", - "treeverse": "^1.0.4", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/ci-detect": { - "version": "1.3.0", - "bundled": true - }, - "@npmcli/config": { - "version": "1.2.9", - "bundled": true, - "requires": { - "ini": "^2.0.0", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "semver": "^7.3.4", - "walk-up-path": "^1.0.0" - } - }, - "@npmcli/disparity-colors": { - "version": "1.0.1", - "bundled": true, - "requires": { - "ansi-styles": "^4.3.0" - } - }, - "@npmcli/git": { - "version": "2.0.6", - "bundled": true, - "requires": { - "@npmcli/promise-spawn": "^1.1.0", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.3", - "npm-pick-manifest": "^6.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.2", - "unique-filename": "^1.1.1", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "bundled": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "1.0.3", - "bundled": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^7.1.6", - "minimatch": "^3.0.4", - "read-package-json-fast": "^2.0.1" - } - }, - "@npmcli/metavuln-calculator": { - "version": "1.1.0", - "bundled": true, - "requires": { - "cacache": "^15.0.5", - "pacote": "^11.1.11", - "semver": "^7.3.2" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "bundled": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "bundled": true - }, - "@npmcli/node-gyp": { - "version": "1.0.2", - "bundled": true - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "bundled": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "1.8.3", - "bundled": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", - "node-gyp": "^7.1.0", - "puka": "^1.0.1", - "read-package-json-fast": "^2.0.1" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "bundled": true - }, - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "agent-base": { - "version": "6.0.2", - "bundled": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.1.4", - "bundled": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "bundled": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "bundled": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "ansi-styles": { - "version": "4.3.0", - "bundled": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true - }, - "ansistyles": { - "version": "0.1.3", - "bundled": true - }, - "aproba": { - "version": "2.0.0", - "bundled": true - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "asap": { - "version": "2.0.6", - "bundled": true - }, - "asn1": { - "version": "0.2.4", - "bundled": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "bundled": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true - }, - "aws-sign2": { - "version": "0.7.0", - "bundled": true - }, - "aws4": { - "version": "1.11.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "bundled": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-links": { - "version": "2.2.1", - "bundled": true, - "requires": { - "cmd-shim": "^4.0.1", - "mkdirp": "^1.0.3", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^2.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^3.0.3" - } - }, - "binary-extensions": { - "version": "2.2.0", - "bundled": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "builtins": { - "version": "1.0.3", - "bundled": true - }, - "byte-size": { - "version": "7.0.0", - "bundled": true - }, - "cacache": { - "version": "15.0.5", - "bundled": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "caseless": { - "version": "0.12.0", - "bundled": true - }, - "chalk": { - "version": "4.1.0", - "bundled": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "2.0.0", - "bundled": true - }, - "cidr-regex": { - "version": "3.1.1", - "bundled": true, - "requires": { - "ip-regex": "^4.1.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "bundled": true - }, - "cli-columns": { - "version": "3.1.2", - "bundled": true, - "requires": { - "string-width": "^2.0.0", - "strip-ansi": "^3.0.1" - } - }, - "cli-table3": { - "version": "0.6.0", - "bundled": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "bundled": true - }, - "string-width": { - "version": "4.2.0", - "bundled": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "bundled": true - }, - "cmd-shim": { - "version": "4.1.0", - "bundled": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true - }, - "color-convert": { - "version": "2.0.1", - "bundled": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "bundled": true - }, - "colors": { - "version": "1.4.0", - "bundled": true, - "optional": true - }, - "columnify": { - "version": "1.5.4", - "bundled": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } - }, - "combined-stream": { - "version": "1.0.8", - "bundled": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "common-ancestor-path": { - "version": "1.0.1", - "bundled": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.3.1", - "bundled": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "bundled": true - } - } - }, - "debuglog": { - "version": "1.0.1", - "bundled": true - }, - "defaults": { - "version": "1.0.3", - "bundled": true, - "requires": { - "clone": "^1.0.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true - }, - "depd": { - "version": "1.1.2", - "bundled": true - }, - "dezalgo": { - "version": "1.0.3", - "bundled": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "5.0.0", - "bundled": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "bundled": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "bundled": true - }, - "encoding": { - "version": "0.1.13", - "bundled": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "env-paths": { - "version": "2.2.0", - "bundled": true - }, - "err-code": { - "version": "2.0.3", - "bundled": true - }, - "extend": { - "version": "3.0.2", - "bundled": true - }, - "extsprintf": { - "version": "1.3.0", - "bundled": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "bundled": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "bundled": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true - }, - "form-data": { - "version": "2.3.3", - "bundled": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-minipass": { - "version": "2.1.0", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true - }, - "function-bind": { - "version": "1.1.1", - "bundled": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "requires": { - "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": { - "version": "4.2.6", - "bundled": true - }, - "har-schema": { - "version": "2.0.0", - "bundled": true - }, - "har-validator": { - "version": "5.1.5", - "bundled": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "bundled": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "bundled": true - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true - }, - "hosted-git-info": { - "version": "3.0.8", - "bundled": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "bundled": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "bundled": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "humanize-ms": { - "version": "1.2.1", - "bundled": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.2", - "bundled": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true - }, - "indent-string": { - "version": "4.0.0", - "bundled": true - }, - "infer-owner": { - "version": "1.0.4", - "bundled": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true - }, - "ini": { - "version": "2.0.0", - "bundled": true - }, - "init-package-json": { - "version": "2.0.2", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^8.1.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^3.0.0", - "semver": "^7.3.2", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "ip": { - "version": "1.1.5", - "bundled": true - }, - "ip-regex": { - "version": "4.3.0", - "bundled": true - }, - "is-cidr": { - "version": "4.0.2", - "bundled": true, - "requires": { - "cidr-regex": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.2.0", - "bundled": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true - }, - "is-lambda": { - "version": "1.0.1", - "bundled": true - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true - }, - "jsbn": { - "version": "0.1.1", - "bundled": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "bundled": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "bundled": true - }, - "json-stringify-nice": { - "version": "1.1.1", - "bundled": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true - }, - "jsonparse": { - "version": "1.3.1", - "bundled": true - }, - "jsprim": { - "version": "1.4.1", - "bundled": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-diff": { - "version": "3.0.2", - "bundled": true - }, - "just-diff-apply": { - "version": "3.0.0", - "bundled": true - }, - "leven": { - "version": "3.1.0", - "bundled": true - }, - "libnpmaccess": { - "version": "4.0.1", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^8.0.0", - "npm-registry-fetch": "^9.0.0" - } - }, - "libnpmdiff": { - "version": "2.0.3", - "bundled": true, - "requires": { - "@npmcli/disparity-colors": "^1.0.1", - "binary-extensions": "^2.2.0", - "diff": "^5.0.0", - "minimatch": "^3.0.4", - "pacote": "^11.2.3", - "tar": "^6.1.0" - } - }, - "libnpmfund": { - "version": "1.0.2", - "bundled": true, - "requires": { - "@npmcli/arborist": "^2.0.0" - } - }, - "libnpmhook": { - "version": "6.0.1", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^9.0.0" - } - }, - "libnpmorg": { - "version": "2.0.1", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^9.0.0" - } - }, - "libnpmpack": { - "version": "2.0.1", - "bundled": true, - "requires": { - "@npmcli/run-script": "^1.8.3", - "npm-package-arg": "^8.1.0", - "pacote": "^11.2.6" - } - }, - "libnpmpublish": { - "version": "4.0.0", - "bundled": true, - "requires": { - "normalize-package-data": "^3.0.0", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.0" - } - }, - "libnpmsearch": { - "version": "3.1.0", - "bundled": true, - "requires": { - "npm-registry-fetch": "^9.0.0" - } - }, - "libnpmteam": { - "version": "2.0.2", - "bundled": true, - "requires": { - "aproba": "^2.0.0", - "npm-registry-fetch": "^9.0.0" - } - }, - "libnpmversion": { - "version": "1.0.11", - "bundled": true, - "requires": { - "@npmcli/git": "^2.0.6", - "@npmcli/run-script": "^1.8.3", - "read-package-json-fast": "^2.0.1", - "semver": "^7.3.4", - "stringify-package": "^1.0.1" - } - }, - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-fetch-happen": { - "version": "8.0.14", - "bundled": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "mime-db": { - "version": "1.45.0", - "bundled": true - }, - "mime-types": { - "version": "2.1.28", - "bundled": true, - "requires": { - "mime-db": "1.45.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minipass": { - "version": "3.1.3", - "bundled": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.3.3", - "bundled": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "bundled": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "bundled": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "bundled": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "bundled": true - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "bundled": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - } - }, - "ms": { - "version": "2.1.3", - "bundled": true - }, - "mute-stream": { - "version": "0.0.8", - "bundled": true - }, - "node-gyp": { - "version": "7.1.2", - "bundled": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - } - }, - "nopt": { - "version": "5.0.0", - "bundled": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "3.0.0", - "bundled": true, - "requires": { - "hosted-git-info": "^3.0.6", - "resolve": "^1.17.0", - "semver": "^7.3.2", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-audit-report": { - "version": "2.1.4", - "bundled": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "bundled": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true - }, - "npm-package-arg": { - "version": "8.1.1", - "bundled": true, - "requires": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "2.1.4", - "bundled": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.0", - "bundled": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-package-arg": "^8.0.0", - "semver": "^7.0.0" - } - }, - "npm-profile": { - "version": "5.0.2", - "bundled": true, - "requires": { - "npm-registry-fetch": "^9.0.0" - } - }, - "npm-registry-fetch": { - "version": "9.0.0", - "bundled": true, - "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "npm-user-validate": { - "version": "1.0.1", - "bundled": true - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true - }, - "oauth-sign": { - "version": "0.9.0", - "bundled": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "requires": { - "wrappy": "1" - } - }, - "opener": { - "version": "1.5.2", - "bundled": true - }, - "p-map": { - "version": "4.0.0", - "bundled": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pacote": { - "version": "11.2.7", - "bundled": true, - "requires": { - "@npmcli/git": "^2.0.1", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^9.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - } - }, - "parse-conflict-json": { - "version": "1.1.1", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "just-diff": "^3.0.1", - "just-diff-apply": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true - }, - "path-parse": { - "version": "1.0.6", - "bundled": true - }, - "performance-now": { - "version": "2.1.0", - "bundled": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true - }, - "promise-all-reject-late": { - "version": "1.0.1", - "bundled": true - }, - "promise-call-limit": { - "version": "1.0.1", - "bundled": true - }, - "promise-inflight": { - "version": "1.0.1", - "bundled": true - }, - "promise-retry": { - "version": "2.0.1", - "bundled": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "0.3.0", - "bundled": true, - "requires": { - "read": "1" - } - }, - "psl": { - "version": "1.8.0", - "bundled": true - }, - "puka": { - "version": "1.0.1", - "bundled": true - }, - "punycode": { - "version": "2.1.1", - "bundled": true - }, - "qrcode-terminal": { - "version": "0.12.0", - "bundled": true - }, - "qs": { - "version": "6.5.2", - "bundled": true - }, - "read": { - "version": "1.0.7", - "bundled": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "2.0.0", - "bundled": true - }, - "read-package-json": { - "version": "3.0.1", - "bundled": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "read-package-json-fast": { - "version": "2.0.2", - "bundled": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "requires": { - "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-scoped-modules": { - "version": "1.1.0", - "bundled": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "request": { - "version": "2.88.2", - "bundled": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "tough-cookie": { - "version": "2.5.0", - "bundled": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - } - } - }, - "resolve": { - "version": "1.20.0", - "bundled": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "retry": { - "version": "0.12.0", - "bundled": true - }, - "rimraf": { - "version": "3.0.2", - "bundled": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true - }, - "semver": { - "version": "7.3.4", - "bundled": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true - }, - "signal-exit": { - "version": "3.0.3", - "bundled": true - }, - "smart-buffer": { - "version": "4.1.0", - "bundled": true - }, - "socks": { - "version": "2.5.1", - "bundled": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.0", - "bundled": true, - "requires": { - "agent-base": "6", - "debug": "4", - "socks": "^2.3.3" - } - }, - "spdx-correct": { - "version": "3.1.1", - "bundled": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "bundled": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "bundled": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "bundled": true - }, - "sshpk": { - "version": "1.16.1", - "bundled": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "8.0.1", - "bundled": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "bundled": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-package": { - "version": "1.0.1", - "bundled": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "bundled": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tar": { - "version": "6.1.0", - "bundled": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "bundled": true - }, - "tiny-relative-date": { - "version": "1.3.0", - "bundled": true - }, - "treeverse": { - "version": "1.0.4", - "bundled": true - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "bundled": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "unique-filename": { - "version": "1.1.1", - "bundled": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "uri-js": { - "version": "4.4.1", - "bundled": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true - }, - "uuid": { - "version": "3.4.0", - "bundled": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "bundled": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "bundled": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "bundled": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "walk-up-path": { - "version": "1.0.0", - "bundled": true - }, - "wcwidth": { - "version": "1.0.1", - "bundled": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "2.0.2", - "bundled": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true - }, - "write-file-atomic": { - "version": "3.0.3", - "bundled": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "yallist": { - "version": "4.0.0", - "bundled": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "readable-stream": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", - "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", - "requires": { - "buffer-shims": "^1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "3.9.9", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", - "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unzipper": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", - "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", - "requires": { - "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.10", - "listenercount": "~1.0.1", - "readable-stream": "~2.1.5", - "setimmediate": "~1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xmldom": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", - "integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==" - }, - "xpath": { - "version": "0.0.27", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", - "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==" - } - } -} diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 5d80e9fb6..64187f59e 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1028,6 +1028,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-pivottable-pivotlayout + name: PivotLayout + fileName: pivottable-pivotlayout.yaml + description: Sets PivotTable layout settings through the PivotLayout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-events-formula-changed name: Formula change event fileName: events-formula-changed.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 0a962af27..de2073d66 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1028,6 +1028,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-pivottable-pivotlayout + name: PivotLayout + fileName: pivottable-pivotlayout.yaml + description: Sets PivotTable layout settings through the PivotLayout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-events-formula-changed name: Formula change event fileName: events-formula-changed.yaml diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 25ab95a16..1e2b8cd65 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -92,7 +92,7 @@ script: await context.sync(); if (column.isNullObject) { - // ading the farm column to the column hierarchy automatically removes it from the row hierarchy + // adding the farm column to the column hierarchy automatically removes it from the row hierarchy pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); } else { pivotTable.columnHierarchies.remove(column); diff --git a/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml b/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml new file mode 100644 index 000000000..d72f8fcac --- /dev/null +++ b/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml @@ -0,0 +1,323 @@ +order: 2 +id: excel-pivottable-pivotlayout +name: PivotLayout +description: Sets PivotTable layout settings through the PivotLayout. +host: EXCEL +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)); + + async function changeLayout() { + await Excel.run(async (context) => { + // Change the PivotLayout.type to a new type. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.layout.load("layoutType"); + 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); + }); + } + + async function addAltText() { + await Excel.run(async (context) => { + // Set the alt text for the displayed PivotTable. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + const pivotLayout = pivotTable.layout; + + pivotLayout.altTextTitle = "Farm Sales PivotTable"; + pivotLayout.altTextDescription = "A summary of fruit sales. It is pivoted on farm name, and fruit type. The aggregated data is both the sums of crates sold at the farms and the sums of crates sold wholesale."; + console.log("Adding alt text. Check the PivotTable settings to see the changes."); + + await context.sync(); + }); + } + + async function addLineSpacing() { + await Excel.run(async (context) => { + // Add a blank row after each PivotItem in the row hierarchy. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + const pivotLayout = pivotTable.layout; + + pivotLayout.displayBlankLineAfterEachItem(true); + console.log("Setting `PivotLayout.displayBlankLineAfterEachItem` to true."); + + await context.sync(); + }); + } + + async function repeatItemLabels() { + 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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.repeatAllItemLabels(true); + console.log("Setting `PivotLayout.repeatAllItemLabels` to true."); + + await context.sync(); + }); + } + + async function toggleFieldHeaders() { + 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"); + const pivotLayout = pivotTable.layout; + pivotLayout.load("showFieldHeaders"); + await context.sync(); + + let showHeaders = !pivotLayout.showFieldHeaders; + console.log(`Show field headers? - ${showHeaders}`); + pivotLayout.showFieldHeaders = showHeaders; + await context.sync(); + }); + } + + async function toggleGrandTotals() { + 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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load(["showRowGrandTotals", "showColumnGrandTotals"]); + await context.sync(); + + let showColumnTotals = !pivotLayout.showColumnGrandTotals; + let showRowTotals = !pivotLayout.showRowGrandTotals; + console.log(`Show column grand totals? - ${showColumnTotals}`); + console.log(`Show row grand totals? - ${showRowTotals}`); + + pivotLayout.showColumnGrandTotals = showColumnTotals; + pivotLayout.showRowGrandTotals = showRowTotals; + + await context.sync(); + }); + } + + async function setEmptyCellText() { + 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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.emptyCellText = "--"; + + // Set the text alignment to match the rest of the PivotTable. + pivotLayout.getDataBodyRange().format.horizontalAlignment = Excel.HorizontalAlignment.right; + await context.sync(); + }); + } + + async function toggleFillEmptyCells() { + await Excel.run(async (context) => { + // Toggle whether empty cells are filled with a default value. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load("fillEmptyCells"); + await context.sync(); + + let fillToSet = !pivotLayout.fillEmptyCells; + console.log(`Filling empty cells? - ${fillToSet}`); + + pivotLayout.fillEmptyCells = fillToSet; + await context.sync(); + }); + } + + async function toggleAutoFormat() { + await Excel.run(async (context) => { + // Set whether the PivotTable adjusts the format after it is refreshed and recalculated. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load("autoFormat"); + await context.sync(); + + let autoFormatToSet = !pivotLayout.autoFormat; + console.log(`Automatically format PivotTable after a refresh? - ${autoFormatToSet}`); + + pivotLayout.autoFormat = autoFormatToSet; + await context.sync(); + }); + } + + async function togglePreserveFormatting() { + 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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load("preserveFormatting"); + await context.sync(); + + let preserveFormattingToSet = !pivotLayout.preserveFormatting; + console.log(`Preserve the formatting PivotTable after a refresh? - ${preserveFormattingToSet}`); + + pivotLayout.preserveFormatting = preserveFormattingToSet; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Data").delete(); + const dataSheet = context.workbook.worksheets.add("Data"); + context.workbook.worksheets.getItemOrNullObject("Pivot").delete(); + const pivotSheet = context.workbook.worksheets.add("Pivot"); + + const data = [ + ["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"], + ["A Farms", "Lime", "Organic", 300, 2000], + ["A Farms", "Lemon", "Organic", 250, 1800], + ["A Farms", "Orange", "Organic", "", 2200], + ["B Farms", "Lime", "Conventional", 80, 1000], + ["B Farms", "Lemon", "Conventional", "", 1230], + ["B Farms", "Orange", "Conventional", 25, 800], + ["B Farms", "Orange", "Organic", 20, 500], + ["B Farms", "Lemon", "Organic", "", 770], + ["B Farms", "Kiwi", "Conventional", 30, 300], + ["B Farms", "Lime", "Organic", "", 400], + ["C Farms", "Apple", "Organic", 275, 220], + ["C Farms", "Kiwi", "Organic", 200, 120], + ["D Farms", "Apple", "Conventional", 100, ""], + ["D Farms", "Apple", "Organic", 80, 2800], + ["E Farms", "Lime", "Conventional", 160, 2700], + ["E Farms", "Orange", "Conventional", "", 2000], + ["E Farms", "Apple", "Conventional", 245, 2200], + ["E Farms", "Kiwi", "Conventional", 200, ""], + ["F Farms", "Kiwi", "Organic", 100, ""], + ["F Farms", "Lemon", "Conventional", "", 270] + ]; + + const range = dataSheet.getRange("A1:E21"); + range.values = data; + range.format.autofitColumns(); + + pivotSheet.activate(); + + const rangeToAnalyze = context.workbook.worksheets.getItem("Data").getRange("A1:E21"); + const rangeToPlacePivot = context.workbook.worksheets.getItem("Pivot").getRange("A2"); + const pivotTable = context.workbook.worksheets + .getItem("Pivot") + .pivotTables.add("Farm Sales", rangeToAnalyze, rangeToPlacePivot); + + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Farm")); + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Type")); + + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold at Farm")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); + + // Add the following if you'd like to see how the layout settings affect a column hierarchy. + //pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Classification")); + + 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 the PivotLayout class to display the PivotTable.

+
+ +
+

Set up

+ +
+
+

Try it out

+ + + + +
+

Header and total settings

+ +
+

Empty cell settings

+ +
+

PivotTable refresh formatting settings

+ + +
+ 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 diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index bef7011f769163b27fd61e99b369bd9f1e3c0321..78a8c89215d3e8e474f0ede9aecf01e734425638 100644 GIT binary patch delta 14600 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 // 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-series.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"]); + const seriesCollection = sheet.charts.getItemAt(0).series; + seriesCollection.load("count"); 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)); + if (seriesCollection.count > 0) { + const series = seriesCollection.getItemAt(0); - // Show the product name and market share percentage. - newSeries.dataLabels.showSeriesName = true; - newSeries.dataLabels.showBubbleSize = true; - newSeries.dataLabels.showValue = false; + // Delete the first series. + series.delete(); } await context.sync(); @@ -499,45 +470,6 @@ // Log the information. console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); -'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': - >- // Link to full sample: @@ -666,6 +598,74 @@ await context.sync(); }); +'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 + + 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.ChartTitle#getSubstring:member(1)': - >- // Link to full sample: @@ -1682,6 +1682,38 @@ 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) => { + $("#display-xml").text(""); + 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<"); + + $("#display-xml").text(`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)': @@ -1708,7 +1740,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartCollection#getByNamespace: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 @@ -1772,38 +1804,6 @@ await context.sync(); } }); -'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 - - await Excel.run(async (context) => { - $("#display-xml").text(""); - 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<"); - - $("#display-xml").text(`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.CustomXmlPartScopedCollection#getOnlyItem:member(1)': - >- // Link to full sample: @@ -1848,6 +1848,20 @@ .add(Excel.ConditionalFormatType.dataBar); conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; + 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.DataPivotHierarchy#showAs:member': @@ -1876,36 +1890,54 @@ 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#prompt: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 await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Decision"); - const rankingRange = sheet.tables.getItem("NameOptionsTable").columns.getItem("Ranking").getDataBodyRange(); + const commentsRange = + sheet.tables.getItem("NameOptionsTable").columns.getItem("Comments").getDataBodyRange(); // When you are developing, it is a good practice to // clear the dataValidation object with each run of your code. - rankingRange.dataValidation.clear(); + commentsRange.dataValidation.clear(); - let greaterThanZeroRule = { - wholeNumber: { - formula1: 0, + // If the value of A2 is contained in the value of C2, then + // SEARCH(A2,C2) returns the number where it begins. Otherwise, + // it does not return a number. + let redundantStringRule = { + custom: { + formula: "=NOT(ISNUMBER(SEARCH(A2,C2)))" + } + }; + commentsRange.dataValidation.rule = redundantStringRule; + commentsRange.dataValidation.errorAlert = { + message: "It is redundant to include the baby name in the comment.", + showAlert: true, + style: "Information", + title: "Baby Name in Comment" + }; + + await context.sync(); + }); +'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 + + 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 } }; @@ -1950,38 +1982,6 @@ }; nameRange.dataValidation.rule = approvedListRule; - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Decision"); - const commentsRange = - sheet.tables.getItem("NameOptionsTable").columns.getItem("Comments").getDataBodyRange(); - - // When you are developing, it is a good practice to - // clear the dataValidation object with each run of your code. - commentsRange.dataValidation.clear(); - - // If the value of A2 is contained in the value of C2, then - // SEARCH(A2,C2) returns the number where it begins. Otherwise, - // it does not return a number. - let redundantStringRule = { - custom: { - formula: "=NOT(ISNUMBER(SEARCH(A2,C2)))" - } - }; - commentsRange.dataValidation.rule = redundantStringRule; - commentsRange.dataValidation.errorAlert = { - message: "It is redundant to include the baby name in the comment.", - showAlert: true, - style: "Information", - title: "Baby Name in Comment" - }; - await context.sync(); }); 'Excel.DataValidationRule#list:member': @@ -2562,6 +2562,72 @@ // Apply the value filter to the field. field.applyFilter({ valueFilter: filter }); + await context.sync(); + }); +'Excel.PivotLayout#altTextDescription:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + + await Excel.run(async (context) => { + // Set the alt text for the displayed PivotTable. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + const pivotLayout = pivotTable.layout; + + pivotLayout.altTextTitle = "Farm Sales PivotTable"; + pivotLayout.altTextDescription = "A summary of fruit sales. It is pivoted on farm name, and fruit type. The aggregated data is both the sums of crates sold at the farms and the sums of crates sold wholesale."; + console.log("Adding alt text. Check the PivotTable settings to see the changes."); + + await context.sync(); + }); +'Excel.PivotLayout#displayBlankLineAfterEachItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.displayBlankLineAfterEachItem(true); + console.log("Setting `PivotLayout.displayBlankLineAfterEachItem` to true."); + + await context.sync(); + }); +'Excel.PivotLayout#emptyCellText:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.emptyCellText = "--"; + + // Set the text alignment to match the rest of the PivotTable. + pivotLayout.getDataBodyRange().format.horizontalAlignment = Excel.HorizontalAlignment.right; + await context.sync(); + }); +'Excel.PivotLayout#fillEmptyCells:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load("fillEmptyCells"); + await context.sync(); + + let fillToSet = !pivotLayout.fillEmptyCells; + console.log(`Filling empty cells? - ${fillToSet}`); + + pivotLayout.fillEmptyCells = fillToSet; await context.sync(); }); 'Excel.PivotLayout#getDataBodyRange:member(1)': @@ -2585,6 +2651,146 @@ masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; await context.sync(); }); + - >- + // 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + pivotTable.layout.load("layoutType"); + 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.PivotLayout#preserveFormatting:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load("preserveFormatting"); + await context.sync(); + + let preserveFormattingToSet = !pivotLayout.preserveFormatting; + console.log(`Preserve the formatting PivotTable after a refresh? - ${preserveFormattingToSet}`); + + pivotLayout.preserveFormatting = preserveFormattingToSet; + await context.sync(); + }); +'Excel.PivotLayout#repeatAllItemLabels:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.repeatAllItemLabels(true); + console.log("Setting `PivotLayout.repeatAllItemLabels` to true."); + + await context.sync(); + }); +'Excel.PivotLayout#showColumnGrandTotals:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load(["showRowGrandTotals", "showColumnGrandTotals"]); + await context.sync(); + + let showColumnTotals = !pivotLayout.showColumnGrandTotals; + let showRowTotals = !pivotLayout.showRowGrandTotals; + console.log(`Show column grand totals? - ${showColumnTotals}`); + console.log(`Show row grand totals? - ${showRowTotals}`); + + pivotLayout.showColumnGrandTotals = showColumnTotals; + pivotLayout.showRowGrandTotals = showRowTotals; + + await context.sync(); + }); +'Excel.PivotLayout#showFieldHeaders:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + pivotLayout.load("showFieldHeaders"); + await context.sync(); + + let showHeaders = !pivotLayout.showFieldHeaders; + console.log(`Show field headers? - ${showHeaders}`); + pivotLayout.showFieldHeaders = showHeaders; + await context.sync(); + }); +'Excel.PivotLayout#showRowGrandTotals:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.load(["showRowGrandTotals", "showColumnGrandTotals"]); + await context.sync(); + + let showColumnTotals = !pivotLayout.showColumnGrandTotals; + let showRowTotals = !pivotLayout.showRowGrandTotals; + console.log(`Show column grand totals? - ${showColumnTotals}`); + console.log(`Show row grand totals? - ${showRowTotals}`); + + pivotLayout.showColumnGrandTotals = showColumnTotals; + pivotLayout.showRowGrandTotals = showRowTotals; + + await context.sync(); + }); 'Excel.PivotTable#columnHierarchies:member': - >- // Link to full sample: @@ -2599,7 +2805,7 @@ await context.sync(); if (column.isNullObject) { - // ading the farm column to the column hierarchy automatically removes it from the row hierarchy + // adding the farm column to the column hierarchy automatically removes it from the row hierarchy pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); } else { pivotTable.columnHierarchies.remove(column); @@ -2629,6 +2835,26 @@ await context.sync(); }); +'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 + + 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(); + + // 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#layout:member': - >- // Link to full sample: @@ -2650,26 +2876,6 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); -'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 - - 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(); - - // 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.PivotTableCollection#add:member(1)': - >- // Link to full sample: @@ -2710,257 +2916,24 @@ await context.sync(); }); -'Excel.Range#getDirectPrecedents:member(1)': +'Excel.Range#autoFill:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml await Excel.run(async (context) => { - // Precedents are cells referenced by the formula in a cell. - 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 (var 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}`); - } + 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#sort:member': +'Excel.Range#copyFrom: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 - - async function sortTopToBottom(criteria: string) { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("A1:E5"); - - // Find the column header that provides the sort criteria. - const header = range.find(criteria, {}); - header.load("columnIndex"); - await context.sync(); - - range.sort.apply( - [ - { - key: header.columnIndex, - sortOn: Excel.SortOn.value - } - ], - false /*matchCase*/, - true /*hasHeaders*/, - Excel.SortOrientation.rows - ); - 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#ungroup: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(); - - // 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)': - - >- - // 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(); - - // Get all the PivotTables that intersect with this range. - const partiallyContainedPivotTables = activeRange.getPivotTables(); - // Get all the PivotTables that are completely contained within this range. - const fullyContainedPivotTables = activeRange.getPivotTables(true); - - partiallyContainedPivotTables.load("name"); - 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}`); - }); - }); -'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#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#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#copyFrom:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + 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"); @@ -2972,42 +2945,6 @@ 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#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: @@ -3056,34 +2993,56 @@ console.log(foundRange.address); } }); -'Excel.Range#hyperlink:member': +'Excel.Range#getCellProperties:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-hyperlink.yaml + 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.getItem("Orders"); + const cell = context.workbook.getActiveCell(); - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + // 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#getDirectPrecedents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml - // 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]; + await Excel.run(async (context) => { + // Precedents are cells referenced by the formula in a cell. + let range = context.workbook.getActiveCell(); + let directPrecedents = range.getDirectPrecedents(); + range.load("address"); + directPrecedents.areas.load("address"); + await context.sync(); - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText - } - cellRange.hyperlink = hyperlink; - } + console.log(`Direct precedent cells of ${range.address}:`); - await context.sync(); + // Use the direct precedents API to loop through precedents of the active cell. + for (var 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#getIntersectionOrNullObject:member(1)': - >- @@ -3144,6 +3103,71 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + const activeRange = context.workbook.getSelectedRange(); + + // Get all the PivotTables that intersect with this range. + const partiallyContainedPivotTables = activeRange.getPivotTables(); + // Get all the PivotTables that are completely contained within this range. + const fullyContainedPivotTables = activeRange.getPivotTables(true); + + partiallyContainedPivotTables.load("name"); + 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}`); + }); + }); +'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#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#getUsedRange:member(1)': - >- // Link to full sample: @@ -3201,38 +3225,6 @@ ); } - 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#style: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 worksheet = context.workbook.worksheets.getItem("Sample"); - let range = worksheet.getRange("A1:E1"); - - // Apply built-in style. - // Styles are in the Home tab ribbon. - range.style = Excel.BuiltInStyle.neutral; - range.format.horizontalAlignment = "Right"; - await context.sync(); }); 'Excel.Range#getUsedRangeOrNullObject:member(1)': @@ -3272,6 +3264,83 @@ 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#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(1)': - >- // Link to full sample: @@ -3313,6 +3382,143 @@ targetRange.format.autofitColumns(); await context.sync(); }); +'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#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 + + async function sortTopToBottom(criteria: string) { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("A1:E5"); + + // Find the column header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("columnIndex"); + await context.sync(); + + range.sort.apply( + [ + { + key: header.columnIndex, + sortOn: Excel.SortOn.value + } + ], + false /*matchCase*/, + true /*hasHeaders*/, + Excel.SortOrientation.rows + ); + await context.sync(); + }); + } +'Excel.Range#style: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 worksheet = context.workbook.worksheets.getItem("Sample"); + let range = worksheet.getRange("A1:E1"); + + // Apply built-in style. + // Styles are in the Home tab ribbon. + range.style = Excel.BuiltInStyle.neutral; + range.format.horizontalAlignment = "Right"; + + await context.sync(); + }); +'Excel.Range#ungroup: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(); + + // 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.RangeAreas#format:member': - >- // Link to full sample: @@ -3605,18 +3811,6 @@ 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); - - await context.sync(); - console.log("Settings changed handler registered."); - }); 'Excel.SettingCollection#getItemOrNullObject:member(1)': - >- // Link to full sample: @@ -3638,6 +3832,18 @@ 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: @@ -3671,21 +3877,20 @@ shape.fill.foregroundColor = "yellow" await context.sync(); }); -'Excel.Shape#rotation:member': +'Excel.Shape#getAsImage: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-images.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("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#group:member': - >- @@ -3701,20 +3906,16 @@ await context.sync(); }); -'Excel.Shape#getAsImage: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-images.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.getItem("Image"); - const result = shape.getAsImage(Excel.PictureFormat.png); + const shape = sheet.shapes.getItem("Square") + shape.incrementLeft(-25); 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)': - >- @@ -3727,6 +3928,17 @@ 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: @@ -3745,26 +3957,32 @@ await context.sync(); }); -'Excel.Shape#incrementLeft:member(1)': +'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("Square") - shape.incrementLeft(-25); + const shape = sheet.shapes.getItem("Octagon") + shape.lockAspectRatio = true; + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Shape#incrementTop:member(1)': +'Excel.Shape#rotation:member': - >- // 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-create-and-delete.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Pentagon") - shape.incrementTop(25); + 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(); }); 'Excel.Shape#scaleHeight:member(1)': @@ -3779,18 +3997,6 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); 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#setZOrder:member(1)': - >- // Link to full sample: @@ -3927,44 +4133,44 @@ wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); -'Excel.Slicer#style:member': +'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 await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.style = "SlicerStyleLight6"; + slicer.clearFilters(); await context.sync(); }); -'Excel.Slicer#selectItems: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 await Excel.run(async (context) => { - const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.selectItems(["Lemon", "Lime", "Orange"]); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.slicers.getItemAt(0).delete(); await context.sync(); }); -'Excel.Slicer#clearFilters: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 await Excel.run(async (context) => { const slicer = context.workbook.slicers.getItem("Fruit Slicer"); - slicer.clearFilters(); + slicer.selectItems(["Lemon", "Lime", "Orange"]); await context.sync(); }); -'Excel.Slicer#delete:member(1)': +'Excel.Slicer#style:member': - >- // 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(); + const slicer = context.workbook.slicers.getItem("Fruit Slicer"); + slicer.style = "SlicerStyleLight6"; await context.sync(); }); 'Excel.SlicerCollection#add:member(1)': @@ -4253,6 +4459,41 @@ textbox.textFrame.deleteText(); await context.sync(); }); +'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.close(Excel.CloseBehavior.save); + }); +'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 + + await Excel.run(async (context) => { + + let myWorkbook = context.workbook; + let activeCell = myWorkbook.getActiveCell(); + activeCell.load("address"); + + await context.sync(); + + console.log("The active cell is " + activeCell.address); + }); +'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#insertWorksheetsFromBase64:member(1)': - >- // Link to full sample: @@ -4289,6 +4530,23 @@ string. reader.readAsDataURL(myFile.files[0]); +'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: @@ -4318,35 +4576,14 @@ console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#pivotTables:member': +'Excel.Workbook#save:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.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}`); - }); + context.workbook.save(Excel.SaveBehavior.save); }); -'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: @@ -4372,37 +4609,6 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'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 - - await Excel.run(async (context) => { - - let myWorkbook = context.workbook; - let activeCell = myWorkbook.getActiveCell(); - activeCell.load("address"); - - await context.sync(); - - console.log("The active cell is " + activeCell.address); - }); -'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.close(Excel.CloseBehavior.save); - }); -'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 - - await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); - }); 'Excel.WorkbookProtection#protect:member(1)': - >- // Link to full sample: @@ -4480,6 +4686,37 @@ } 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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const farmData = sheet.getUsedRange(); + + // This filter will only show the rows with the top 25% of values in column 3. + sheet.autoFilter.apply(farmData, 3, { criterion1: "25", 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: @@ -4497,56 +4734,93 @@ console.log(`${property.key}:${property.value}`); }); }); -'Excel.Worksheet#onRowSorted:member': +'Excel.Worksheet#findAllOrNullObject: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/54-worksheet/worksheet-find-all.yaml await Excel.run(async (context) => { - console.log("Adding row handler"); - const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sheet = context.workbook.worksheets.getItem("Sample"); + const foundRanges = sheet.findAllOrNullObject("Complete", { + completeMatch: true, + matchCase: false + }); - // 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(); + 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"; - } + 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 - return context.sync(); - }); - }); + 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#onColumnSorted:member': +'Excel.Worksheet#getPrevious: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/54-worksheet/reference-worksheets-by-relative-position.yaml await Excel.run(async (context) => { - console.log("Adding column handler"); - const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sheets = context.workbook.worksheets; + const currentSheet = sheets.getActiveWorksheet(); + const previousYearSheet = currentSheet.getPrevious(); + const currentTaxDueRange = currentSheet.getRange("C2"); + const previousTaxDueRange = previousYearSheet.getRange("C2"); - // 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(); + currentSheet.load("name"); + previousYearSheet.load("name"); + currentTaxDueRange.load("text"); + previousTaxDueRange.load("text"); - // 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"; - } + await context.sync(); - return 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)': + - >- + // 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#onChanged:member': - >- // Link to full sample: @@ -4559,23 +4833,30 @@ console.log("Added a worksheet-level data-changed event handler."); }); -'Excel.Worksheet#onSingleClicked:member': +'Excel.Worksheet#onColumnSorted: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/30-events/event-column-and-row-sort.yaml await Excel.run(async (context) => { + console.log("Adding column handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); - sheet.onSingleClicked.add((event) => { + + // 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(`Click detected at ${event.address} (pixel offset from upper-left cell corner: ${event.offsetX}, ${event.offsetY})`); + console.log("Column 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(); }); }); - - console.log("The worksheet click handler is registered."); - - await context.sync(); }); 'Excel.Worksheet#onFormulaChanged:member': - >- @@ -4612,27 +4893,47 @@ ); }); } -'Excel.Worksheet#showOutlineLevels:member(1)': +'Excel.Worksheet#onRowSorted:member': - >- // 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/30-events/event-column-and-row-sort.yaml - Excel.run(async (context) => { + await Excel.run(async (context) => { + console.log("Adding row handler"); const sheet = context.workbook.worksheets.getActiveWorksheet(); - // This collapses the entire outline. - sheet.showOutlineLevels(1, 1); - await context.sync(); + // 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(); + }); + }); }); +'Excel.Worksheet#onSingleClicked:member': - >- // 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/30-events/event-worksheet-single-click.yaml - Excel.run(async (context) => { + 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."); - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); await context.sync(); }); 'Excel.Worksheet#pivotTables:member': @@ -4652,96 +4953,79 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Worksheet#slicers:member': +'Excel.Worksheet#showGridlines:member': - >- // 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/gridlines.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 sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; + await context.sync(); }); -'Excel.Worksheet#getRanges:member(1)': +'Excel.Worksheet#showOutlineLevels: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) => { + 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(); - const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); - specifiedRanges.format.fill.color = "pink"; + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - await Excel.run(async (context) => { + Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); - const farmData = sheet.getUsedRange(); - // This filter will only show the rows with the top 25% of values in column 3. - sheet.autoFilter.apply(farmData, 3, { criterion1: "25", filterOn: Excel.FilterOn.topPercent }); + // This shows the top 3 outline levels; collapsing any additional sublevels. + sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Worksheet#copy:member(1)': +'Excel.Worksheet#slicers:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-copy.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.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"); - + 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(); - - console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -'Excel.Worksheet#findAllOrNullObject:member(1)': +'Excel.Worksheet#tabColor:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const foundRanges = sheet.findAllOrNullObject("Complete", { - completeMatch: true, - matchCase: false - }); + const activeSheet = context.workbook.worksheets.getActiveWorksheet(); + activeSheet.tabColor = "#FF0000"; await context.sync(); - - if (foundRanges.isNullObject) { - console.log("No complete projects"); - } else { - foundRanges.format.fill.color = "green" - } }); -'Excel.Worksheet#showGridlines:member': +'Excel.WorksheetAddedEventArgs#worksheetId:member': - >- // 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; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml - await context.sync(); - }); -'Excel.Worksheet#getNext:member(1)': + async function onWorksheetAdd(event) { + await Excel.run(async (context) => { + console.log( + "Handler for worksheet onAdded event has been triggered. Newly added worksheet Id : " + + event.worksheetId + ); + }); + } +'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 @@ -4770,55 +5054,35 @@ await context.sync(); }); -'Excel.Worksheet#getPrevious: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 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(); + // 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"); - 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]}`) + firstSheet.load("name"); + lastSheet.load("name"); + firstTaxRateRange.load("text"); + lastTaxRateRange.load("text"); await context.sync(); - }); -'Excel.Worksheet#tabColor:member': - - >- - // 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"; + 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.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 - - async function onWorksheetAdd(event) { - await Excel.run(async (context) => { - console.log( - "Handler for worksheet onAdded event has been triggered. Newly added worksheet Id : " + - event.worksheetId - ); - }); - } 'Excel.WorksheetCollection#onActivated:member': - >- // Link to full sample: @@ -4855,64 +5119,6 @@ await context.sync(); console.log("A handler has been registered for the OnDeactivate event."); }); -'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 - - 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.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 - - 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.WorksheetCustomPropertyCollection#add:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index d16d7f1d0..b0b86d761 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -108,6 +108,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml", "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", diff --git a/view/excel.json b/view/excel.json index bde1c7cda..665d8b3d1 100644 --- a/view/excel.json +++ b/view/excel.json @@ -108,6 +108,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", + "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml", "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-formula-changed.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", From 9d6d28b314d0d04dc5044e80383b5bdcfb66e83a Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Fri, 16 Apr 2021 16:26:01 -0700 Subject: [PATCH 013/336] shows how to use tags in PowerPoint --- playlists-prod/powerpoint.yaml | 9 + playlists/powerpoint.yaml | 9 + samples/powerpoint/preview-apis/tags.yaml | 228 ++++++++++++++++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 5 files changed, 248 insertions(+) create mode 100644 samples/powerpoint/preview-apis/tags.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index db975ce24..8e4e97dc7 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -53,6 +53,15 @@ 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 diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 8fdf0e2c3..581c14ba5 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -53,6 +53,15 @@ 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 diff --git a/samples/powerpoint/preview-apis/tags.yaml b/samples/powerpoint/preview-apis/tags.yaml new file mode 100644 index 000000000..fa2439de1 --- /dev/null +++ b/samples/powerpoint/preview-apis/tags.yaml @@ -0,0 +1,228 @@ +id: powerpoint-tags +name: Work with tags +description: Use tags to process subsets of slides +host: POWERPOINT +api_set: + PowerPointApi: '1.2' +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)); + + async function addTagToSelectedSlide() { + 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)); + }); + } + + async function deleteTag() { + await PowerPoint.run(async function (context) { + const slide = context.presentation.slides.getItemAt(0); + slide.tags.items[0].delete(); + + await context.sync(); + }); + } + + function getSelectedSlideIndex() { + // Wrap a call of one of the Common APIs in a Promise-returning + // function, so that it can be easily called within a run() method + // of an application-specific API. + return new OfficeExtension.Promise(function (resolve, reject) { + Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) { + try { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + reject(console.error(asyncResult.error.message)); + } else { + const result = asyncResult.value as any; + resolve(result.slides[0].index); + } + } catch (error) { + reject(console.log(error)); + } + }); + }); + } + + async function deleteSlidesByAudience() { + await PowerPoint.run(async function(context) { + const slides = context.presentation.slides; + slides.load("tags/key, tags/value"); + + await context.sync(); + + 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]; + if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") { + currentSlide.delete(); + } + } + } + + await context.sync(); + }); + } + + async function addMultipleSlideTags() { + await PowerPoint.run(async function(context) { + const slide = context.presentation.slides.getItemAt(0); + slide.tags.add("OCEAN", "Indian"); + slide.tags.add("PLANET", "Jupiter"); + slide.tags.add("CONTINENT", "Antarctica"); + + await context.sync(); + + slide.tags.load("key, value"); + + await context.sync(); + + for (let i = 0; i < slide.tags.items.length; i++) { + console.log("Added key " + JSON.stringify(slide.tags.items[i].key) + " with value " + JSON.stringify(slide.tags.items[i].value)); + } + }); + } + + async function addShapeTag() { + await PowerPoint.run(async function(context) { + const slide = context.presentation.slides.getItemAt(0); + const shape = slide.shapes.getItemAt(0); + shape.tags.add("MOUNTAIN", "Denali"); + + await context.sync(); + + const myShapeTag = shape.tags.getItem("MOUNTAIN"); + myShapeTag.load("key, value"); + + await context.sync(); + + console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); + }); + } + + async function addPresentationTag() { + await PowerPoint.run(async function (context) { + let presentationTags = context.presentation.tags; + presentationTags.add("COLOR", "blue"); + + await context.sync(); + + const 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)); + }); + } + + async function deletePresentationTag() { + await PowerPoint.run(async function (context) { + let presentationTags = context.presentation.tags; + + presentationTags.delete("COLOR"); + + await context.sync(); + + console.log(JSON.stringify(presentationTags)); + }); + } + + /** 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: |- +
+

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 show 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: |- + 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/powerpoint.json b/view-prod/powerpoint.json index a7050c6ce..094736815 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -5,6 +5,7 @@ "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-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" } \ No newline at end of file diff --git a/view/powerpoint.json b/view/powerpoint.json index 02ca3347e..cc82b0310 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -5,6 +5,7 @@ "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-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" } \ No newline at end of file From 3eead1f291f66a901e8b90251d02b6975f2c20fd Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Fri, 16 Apr 2021 16:50:26 -0700 Subject: [PATCH 014/336] update PowerPoint API spreadsheet --- samples/powerpoint/preview-apis/tags.yaml | 9 --------- snippet-extractor-metadata/powerpoint.xlsx | Bin 11821 -> 12078 bytes 2 files changed, 9 deletions(-) diff --git a/samples/powerpoint/preview-apis/tags.yaml b/samples/powerpoint/preview-apis/tags.yaml index fa2439de1..639ef6629 100644 --- a/samples/powerpoint/preview-apis/tags.yaml +++ b/samples/powerpoint/preview-apis/tags.yaml @@ -34,15 +34,6 @@ script: }); } - async function deleteTag() { - await PowerPoint.run(async function (context) { - const slide = context.presentation.slides.getItemAt(0); - slide.tags.items[0].delete(); - - await context.sync(); - }); - } - function getSelectedSlideIndex() { // Wrap a call of one of the Common APIs in a Promise-returning // function, so that it can be easily called within a run() method diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 8d5332e28bb276d312eb804874e05086be5afc76..9126f84a17393092ff0d9026f2fedba27c160d40 100644 GIT binary patch delta 3525 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 Zlm?Z7C@?6cPDOtOppq7)y@L81^Dk#AdF=oI delta 3241 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 Date: Fri, 16 Apr 2021 16:52:11 -0700 Subject: [PATCH 015/336] snippets.yaml --- snippet-extractor-output/snippets.yaml | 123 +++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7bc277ec9..9a08bd7a8 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9535,6 +9535,129 @@ }); await context.sync(); }); +'PowerPoint.TagCollection#add:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + + await PowerPoint.run(async function(context) { + const slide = context.presentation.slides.getItemAt(0); + slide.tags.add("OCEAN", "Indian"); + slide.tags.add("PLANET", "Jupiter"); + slide.tags.add("CONTINENT", "Antarctica"); + + await context.sync(); + + slide.tags.load("key, value"); + + await context.sync(); + + for (let i = 0; i < slide.tags.items.length; i++) { + console.log("Added key " + JSON.stringify(slide.tags.items[i].key) + " with value " + JSON.stringify(slide.tags.items[i].value)); + } + }); +'PowerPoint.SlideCollection#getItemAt:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/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#getItem:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/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.Slide#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + + await PowerPoint.run(async function(context) { + const slides = context.presentation.slides; + slides.load("tags/key, tags/value"); + + await context.sync(); + + 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]; + if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") { + currentSlide.delete(); + } + } + } + + await context.sync(); + }); +'PowerPoint.ShapeCollection#getItemAt:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + + await PowerPoint.run(async function(context) { + const slide = context.presentation.slides.getItemAt(0); + const shape = slide.shapes.getItemAt(0); + shape.tags.add("MOUNTAIN", "Denali"); + + await context.sync(); + + const myShapeTag = shape.tags.getItem("MOUNTAIN"); + myShapeTag.load("key, value"); + + await context.sync(); + + console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); + }); +'PowerPoint.TagCollection#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/tags.yaml + + await PowerPoint.run(async function (context) { + let presentationTags = context.presentation.tags; + + presentationTags.delete("COLOR"); + + await context.sync(); + + console.log(JSON.stringify(presentationTags)); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: From 4964edcb0b09156533eb3998e28048e15044ee42 Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Tue, 20 Apr 2021 12:36:50 -0700 Subject: [PATCH 016/336] Apply suggestions from code review Co-authored-by: Elizabeth Samuel --- samples/powerpoint/preview-apis/tags.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/samples/powerpoint/preview-apis/tags.yaml b/samples/powerpoint/preview-apis/tags.yaml index 639ef6629..aa2c89f9b 100644 --- a/samples/powerpoint/preview-apis/tags.yaml +++ b/samples/powerpoint/preview-apis/tags.yaml @@ -1,6 +1,6 @@ id: powerpoint-tags name: Work with tags -description: Use tags to process subsets of slides +description: Use tags to process subsets of slides. host: POWERPOINT api_set: PowerPointApi: '1.2' @@ -159,12 +159,12 @@ template:

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 show only to premium customers.

+

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. +

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.

-

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

+

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

@@ -216,4 +216,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 From 129ded4df6cc2db5bd90059f8fcc8ea077150608 Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Tue, 20 Apr 2021 12:41:16 -0700 Subject: [PATCH 017/336] re-run yarn start --- playlists-prod/powerpoint.yaml | 2 +- playlists/powerpoint.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 8e4e97dc7..d9a8ee75b 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -56,7 +56,7 @@ - id: powerpoint-tags name: Work with tags fileName: tags.yaml - description: Use tags to process subsets of slides + 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 diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 581c14ba5..6a48d8386 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -56,7 +56,7 @@ - id: powerpoint-tags name: Work with tags fileName: tags.yaml - description: Use tags to process subsets of slides + 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 From a2fda96e9a41c1486b51f1e0a5b58476bd1df13b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 May 2021 09:39:12 -0700 Subject: [PATCH 018/336] Bump lodash from 4.17.20 to 4.17.21 (#534) Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0c8f5183b..a6cc8fd25 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "excel": "^1.0.1", "fs-extra": "3.0.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "node-status": "^1.0.0", "npm": "^7.5.3", "rimraf": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index 3b17023a0..73e6f454d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1292,10 +1292,10 @@ listenercount@~1.0.1: resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= -lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lru-cache@^6.0.0: version "6.0.0" From 9953a95ab4d4d2051c254b5b17cb78fa55dbfa6e Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 11 May 2021 12:39:21 -0700 Subject: [PATCH 019/336] [Excel] Add direct dependents preview sample (#536) * Adding direct dependents code sample * Adjust formatting of direct dependents sample * Adjust direct dependents sample comments and method names * Update excel.xlsx metadata file * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Remove unnecessary extra function call Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../range-direct-dependents.yaml | 166 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 23616 -> 23777 bytes 2 files changed, 166 insertions(+) create mode 100644 samples/excel/85-preview-apis/range-direct-dependents.yaml diff --git a/samples/excel/85-preview-apis/range-direct-dependents.yaml b/samples/excel/85-preview-apis/range-direct-dependents.yaml new file mode 100644 index 000000000..c930f0907 --- /dev/null +++ b/samples/excel/85-preview-apis/range-direct-dependents.yaml @@ -0,0 +1,166 @@ +order: 4 +id: excel-direct-dependents +name: Direct dependents +description: This sample shows how to find and highlight the direct dependents of the currently selected cell. Dependent cells contain formulas that refer to other cells. +host: EXCEL +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)); + + /** Select a cell with direct dependents on the same worksheet. */ + async function selectD3() { + await Excel.run(async (context) => { + // Activate the sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample2019Data"); + sheet.activate(); + + // Select cell D3. + const range = sheet.getRange("D3"); + range.select(); + await context.sync(); + }); + } + + /** Select a cell with direct dependents across worksheets. */ + async function selectE4() { + await Excel.run(async (context) => { + // Activate the sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample2019Data"); + sheet.activate(); + + // Select cell E4. + const range = sheet.getRange("E4"); + range.select(); + await context.sync(); + }); + } + + async function getDirectDependents() { + await Excel.run(async (context) => { + // Direct dependents are cells that contain formulas that refer to other cells. + let range = context.workbook.getActiveCell(); + let directDependents = range.getDirectDependents(); + range.load("address"); + directDependents.areas.load("address"); + await context.sync(); + + console.log(`Direct dependent cells of ${range.address}:`); + + // Use the direct dependents API to loop through direct dependents of the active cell. + for (let i = 0; i < directDependents.areas.items.length; i++) { + // Highlight and print the address of each dependent cell. + directDependents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directDependents.areas.items[i].address}`); + } + await context.sync(); + }); + } + + /** Create two sample tables on different worksheets with functions that span the tables. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample2019Data").delete(); + context.workbook.worksheets.getItemOrNullObject("Sample2020Data").delete(); + + // Set up the first sample table. + const sheet1 = context.workbook.worksheets.add("Sample2019Data"); + const data1 = [ + ["Product", "Qty", "Unit Price", "Total Price 2019"], + ["Almonds", 2, 7.5, "=C3 * D3"], + ["Coffee", 1, 34.5, "=C4 * D4"], + ["Chocolate", 5, 9.56, "=C5 * D5"] + ]; + + const range1 = sheet1.getRange("B2:E5"); + range1.values = data1; + range1.format.autofitColumns(); + + // Set up the second sample table. + const sheet2 = context.workbook.worksheets.add("Sample2020Data"); + const data2 = [ + ["Product", "Qty", "Unit Price", "Total Price 2020", "Average Annual Price"], + ["Almonds", 2, 8.0, "=C3 * D3", "=Sample2019Data!E3 + E3 / 2"], + ["Coffee", 1, 36.5, "=C4 * D4", "=Sample2019Data!E4 + E4 / 2"], + ["Chocolate", 5, 11.2, "=C5 * D5", "=Sample2019Data!E5 + E5 / 2"] + ]; + const range2 = sheet2.getRange("B2:F5"); + range2.values = data2; + range2.format.autofitColumns(); + + // Style the tables. + const header1 = range1.getRow(0); + header1.format.fill.color = "#4472C4"; + header1.format.font.color = "white"; + const header2 = range2.getRow(0); + header2.format.fill.color = "#4472C4"; + header2.format.font.color = "white"; + sheet2.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 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.

+ +
+ +
+ +
+ 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 diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 78a8c89215d3e8e474f0ede9aecf01e734425638..5bc14f076afa47535ff60fc93fe7b3baddba0d79 100644 GIT binary patch delta 12944 zcmZ8|Wk6j$v+l;-U5dNATXA=HibHYN4HS3SKq;_sch}Cr;b|WGDcD9S#6M0{{TtUs=7JT5!wxX9eTTXc9HdES<^B|g-k4fkV7KBx%7~|Ej>E=LET=UI+_a}HJa^}c z7KjOnyKG9BZhKte|5NWkbQo3fdBib(1VI}0QeH3W!Yux8C(9Z>|2He6LBeI=HNWox z)QjuGqe%%-8OddlzdIn8=)k7RBgc0`wc2Mq9BcU&Rj5gmd5%pJZQ~c?RJqw?n>;gM}eYMo6n_fKgqK$(Ovf=pr?(dGGuYN(TcyYg` zak2Rweq@WftJl54S~wwiG$RHA$$vsi?5YR`pZ054(WMewRH*<~R+Ikb=9nfVdXfJQ zjO}%i4K8^CvGEJls&CWkg~3%`;lyri%pH*2fIZ_v&h1!pEqDcjFnWf~m|R9<%1 zEn1X+R_=%GEDt?cAeLfFA^JO&J0wCR1!WvUAD`&uNq4BQ52!piQIDbpYK!z^?`i(D zGB2pfYb-(OB?*sGnOv!oFS#}{c`D&UlpuxJS6%Ry&6ApMz~)X)1_)@mAUq6Z zNW2=Wd6X|?_;8$?MzC$&`H6K}(n_8a=imR5dI9D!@{ZlB2-EC~@0z~sQyLC!`he>o z#%yWfpSq|sXZZR#u|`6$X)=CK*0VX=8c*0r-t0%?)>y>7y?|)h9?tBh?n<|60J5tt zb}L_;gz-NR!Ywk^EiYbJHDUq%30a0~#QZML=Q}Tbi$kn1-aI|UO_tkA zw*0SXAP8t|;I-iyX!}D^z!Cre_J8!n&Bn~t(n7=C)z;D4?H{FyHJo&%Y{BR%VYtkl zrRR@r@?5UgwDU4bX}l?y?@*6Q0YAY`itSlMK=}qzx#ZAHC)18Ep-d!7@`n3?f}{&( zZ0_E#&RJ_tPxh919F9-CN;ZLy2X_ODZH&M%-{*@vGndpqyLW}>ibm;U3lHnZi_In7 zKi^MHHkuv0LYh2YFWeVAGJ)CPrsuJ0rC0FkZ$eI$YQ0ReYXu#rQ zfq>uyiSs{0)HDbQ@IwO6l0;`>HFis^h-9}L_Gk4b67lBd8)TOHVRT;siNYx?;-yRu3FL8pixlL}Nn#myg}= z3t@h4$D}iN67?tT7tMg5{5Y`O#kcfBMLU?2xb+mMeXr}KZYozBUpZY6(Q-KqhT;AC zqGWWwYG^eg?VX(U^}57dC&vJ-iN?Y+i(-R9e|ewiS3@`bA+$1Tqoubi9!r|cM-I88 z5$jcqo$}FC5G4neIW$Fwp=oD}=LMIWUh7?|C9>`_uV#>-GU9(8GNbs+KF)s!)z(8zyhOh>(EL#s_L>x)jjUhyn^b~Ns6ke`P`cs;KUc|^LU z!u{scmdFLGVAG<&CFyFl8X-C=2Sg(uHp^X0BUvOB%X=4)z>1;+`aU;e6`OneUc;&% zyWV443^p>#UqTac-NpT|1TnR1Q-Pi3SKgb}1D%icn>8{_zgDV<9QB6FWEo6m{Km^VBX*=_t8T8^ug)37z)dFQ)m8Ffo_pBLguW9@d;O>%F|UKWsc`=nyCzT1(G~d{f!28RMG;{Q)qeH1FlnWpEe33PJ?9^WO-w782%r- z^%e0oH&~qf30SW#Y1Zin`7&&Ymf~5)_R|`Ae%D9($6~HZp*$SA;;5lWpOq&~3U}S% z4TyFD7HuB9Bvgp)jQH)~iZEq3YCc$*nk6;`b@w=64jHUXm0B-gIUGw))60{n^zY5- z3>8oGBu$>ELHpl7Y58R|g?TI;%Odn?BXfsljRsLz4bY$;nvF*Yj8PgPcO~U(r9w>h z@PdA=Q7vL|9HAU)lk*q*VbPr}ohA{js%o#6aYDAdC7x{voP&gm->lG;S97tumjuwq z`@PeEM6Xm-K3Rr*Y9R;@@vLd9{jwF5HYw6UR@`S?fyc(7tgGrM@1MWQZUNV3VNWPl zpXKt_5msdkSaf#0y;}3#;LpFCXTMMBI@D50n8{rmnr+C0s-O4Cg`Nt~Krj-pvkf@S z*Fs0{3vDlgbzQ}%m!gPe)rO0W7*_`XAubTWUS#6vLmGK4a+LB==vP+WMr_>9ma&^_ zpP=!*pH8oBGWNE5j7~+|(@~E3Gf3p<4}-U3O_1qUa-VnelPJX$vT9{l7^J1f561p( zi04CFq}3B1{i#L3LzXFe5iP@Za=j86*K z=;Io?VAe(*)Mw5tT4Uq3w{hfadDNUw{1AERr++4L_z>VUiOKu|c6VLwiad)`>cqd` ze-}L!ggaDY7p!}=1pGMm`N4(hsDf3_+;&Ku1eP*ck@WfrH}hQgeaW5xR2wP;WcVZD z=seGUi!iUR2H8a?Bs$2#ECWhuN>Ya5zM@L=dFAIX)9A}1TYj@R!WX9!wvybDVox&x zE7JGAKS>ZAJn43qqT`cQf?1$J@v=+Ga%hT>#8Y;fpsVdfjpgG%jhTXKR#`DS{k2oF1b3cpbZ&cUp+(wC2!wfYm}wP*yZ5-SkA7f zCEX5J8rRV39=lZ$;2($8Z3Jif0k8A`tWH8d=iz3-k;vhml=OX|`3r-@POY&hwm}Nz zxR6AwO*2QvXWu|5W~kFfXS-3Sqf;e8bmOj}?8Yk}OyZoYrXQ}F?@IF)-!kA3I%Z{P zqS&k&!JF+t?YFH?0o}*JvN#zwp=%fnbDFVsD;?@y8eF>rNS|ZBlx^`XBX&IY9cvh5 z+EUBEFP4QPx$j{C>6a-Opl-b=pQvbBU{Z9&2N1(U9)CcZN1++F_%BEnlJIEFla{Mg zDXs6?GjOknKT78G@VP(IiU*06Rw2qAn5`R66)`aNa=$Si5!}Y*niLcBE-@NQ|V}H(Z%1bWn%YJJwVO{%9AaD9~0<8re}7)yHdAy zye9RQ9xJyuibxz{xZLZ`@ihKgvS%f~;|>_C@$#zOQW1ZW?<*D1XCML>#BCjtQeTRj zrf;1?fJ$3KIace2`k-PFy!di&I%rH42RBs=_5IbJA>G$02k71RIT zj?J6Uh4J|T#iRGWjq2zxNy)}fUGG>y! zIF#d`=ifDCg3UAincMzke)n)1iFSL7ZI>5Tb)V|O8R;k4!neXh`hzQoxf-^2n8#zP zDM1J^-D=q~>bIC+Gh6t+AaA=b2{S{6JM;H0L>hFau+~pLagXmHa!s5DCOJ3=(1RX& z1BEOi1VWyGdNC&n0N?>aLm>kit;Q3{xd!lV0d4L&<|it5loA`!S)tIjxM2nDUw_!C zshhWFI`D93==Hx}jO6R49!f%I)&(sQ9!o+~GO#8Q{O~wAH~H(`+WivH0qj~8?&?sk zky+AN9bR28=@@3ctbV_}6z$9~G7%=_Nyy=O>=-`pI2CP~UIO~O*SrI79$p>aS8tcj zADpRiNpd!gfWpMt8*6Jqn}O>hU$advvzrq_{5Q@?dElN;|Bg@I&INWn&(jO9ZSKw3 zxZc*b`TZ2p_ipGO7`nJU>{vaw^Ljlud-dicTz0zTg}Z)#K3$)?9bM@^r#>LzdEM+1 z?rdKd7K(~W@Ot!$5ETR#Ea{-NI0gQ_X(A-kE+dZOa=k&0;c_|NtT6`mVs80CUd}CVqOdF@< zYrgMtzUklbdUx>xv@Ur5Nx-aABeEwHu%N6nu0tx~Z)3uY+rR~Ut~IX0+kJjF>IS|Z zE91s+Q{UOd5hoE zy{85tEB9>GYxld%aq^?+-zN9ngpPHm!L{jpzGRcY6(Pr(zi;<)0ut88wSF&;=ZF2S zeysYW>e(hH4vuI*uWlzGMz7ZrsaHh*MV_p?#6H>kolp1c@I&2glUtdjT4ny#%*f1{ zK-13c?Yn!OCooCO=|%SRT}0}S25)2FvPr<2kkj{$*Y~bh_a_Eah02`f9Nx_fw0_Yk zSr;hXK8^zQD48?4)<@Xq`&irR=8x`5o~DIwc=>z z4VQE;>WHqp&_1u6@1RGYxnP4KM?q=gGaL>I9OEFx%SK!kg{c1rpVvxRr3H&hs#JPG{^y@ZO!=yW*U0Ng z_bvo>lUY!lp({yvdNvrU)_Vj>c`?v*gY}T^;^RTwCj!EZQuP5C7bV8$_HoKb5Y=Kj zuZU^FCX{+Y3%1150>M;zy-Hi$S98N106rq0GF0h|_B~TN+og zc)FOxlqK1ELSu&roo*FcM3<@Z$w58Q{zZ;8T6RN;!k;CY(9ws*7#Q750Bd)Ri5A#U zm8Q>UMOnrZb=AfO$eyKf3|rAK7RC~4M08xF(Bq1^A^<`-VogVtR=rXGzU56O;ykk; zx;TSZ;on7{nEq}$z4^6P!4~=LHnifjtQ%DNHulvEV3%MN*{9=ev`8HT76iZnNFO6x< zZ^pOF+BaqrvTPCpCa8;|nxa^HHBeF>9>dBttTrMq&#Gcp$?EzgnQVnYa^izU0))Or zB;IOPYtrJn5MEXFX;n6jd%$yLpv@ejN0(5aSKCtY<-U-e`g&4mBdOM}hodIhp-3g< z^G&UQ{ff5}7)&twLkXi;zr_)gd7kHI#xe7~2YJ8exP5yQ{hmjIETO}R;*uui`7nO9 zS@xmSQpRC#;f&BzjB>plMOzcr!NE3U1$hdMA;M)?_yN0JpPM|6eZQxmn>LCP6^d6M zt8}r#Pic#C@2|fdJuIZpeGev)lh)SoJ&f1?G^%El0m+NxN5UN_ISL}rn)HZ9cfeN) z4p#8TBffcEyo7cF92z6^6kd3+EW*P_p(e4Fm1L#iQxQqy8?)#?iiUP4oO?c5J6L%9 zLg>c-;euI7DTsiQq-V##p)m4;Xmvy&A71B_ghdr=;*=z4HJq^sS}=8%r~V6F-{D)B z5l@YuByd?ssya26Zi}{LLpF*Df5o?dRnhwux>f+KrR8_7IkejQ7XvU?k7r?AC5nI< z;b@$|_R?VwGwC-bKZX9>+IgFA&CSF%od^H&wg{IPH;QQ*$(4F6AYdK&M%BkLK}0)? zk~P+F3lzv|=T-#37}1usBo!KmMxf-KFmMC)i&l2Eh<`0~g;ejJ@+B9?)Lt^?Vr>MI zjb-Xcf+tV;>StK`to^IhjC-rZbcA)pDpnYcGouP;T{`hd+(-fLW9CSz=k^XhCse~O zRQ$NxoYPIx3)hK9`fad^C+Ize4Z%b*H^&J(Tu{s z0W?kUm>yT}jg(Z?*>mMCfj8z<^vY!CW$0I`c&yI8^MB&yVlaF^lAYF%7;G29wWAx7^8uC8`UW!m#rB<-@-{ zG`Y&edpOGfgv@Xyv;R9t_b6go5p^-8x&09h_L7~_k$W??V0sT|?iF<`W~n9O=G;O; z2vyclSzqv?oN9z>0gA)Q_k8>Ck2ZnOVx6O$$sQ$%r2GctW3+uC8RS87IFPxC0ct1h((&;x^B#7Y4YKXbef@i*Ua)xZx2?t)m1{7&%WWrYF?)*?{!>7cpoL7X zQln3ppEfb5ceA^b-UKSHY zfRyDqYfsdpb168byY$>6LKX;_^;txnHw>U{ZCW_-${hlp;YpzCpb*0L^S(zZZ6}PO zQ|Yu>rhk~A)T@HexyDf?vB|CAxwTpTn3jcu+7hB`YSAF;HG7Cj!zE*o!(o1}Q1X2A zRjt`qemQhSr0Ala#qx;8CkBk(4UL4ocK)yD?)ZQNA71(uD|{QxFko;ko-`HA6#4Km z8$g>C^p80t)G{MG`)YlVG@<)pp%{XOe-fcPa3XV+_lf;RqD*E#bZ(YKCIZkb6r2T6 zGh9;#NP@FO6ZU>ltnor$!U8lS1R`DkO3p90O;8>;z@xbdiGD3z!W53N$@l{^MYYfn zj$)gNcg6f$jjE^^sGM<8aBV?(hCE24kOUn6T)tz?hW(84)MVS`K~usNUASFvH-3$i zNj2yctKd&t#vr1Qq+U2+Eyw>_^ig`D?3>==JwwN=bLd$Oz@9&e_^Jg5%@}UCuVloY zyf_DcBYGO9b)++Iu;)${Rf1um*>5}GQ#K5IS+V`~2#zoOYNlNV0&jC| z{itB6tO3LRIT6GyP#3kObJM`D2D=>l!%lVs)F}Qv@q%ALSoLMEvhNw{fCYx^U z8f$f=5u64#WINK(QTpj*Ys5yB$)YuVp$SIsq8M0si{^8J4r>^h8xB@)jbkY(hoC83 zbZ*~}Yl)Vn$m`l}EKyO8NajGN(NkVJZdf>@D0SjHKL*X^-60LgrpJk< z`=SUa_S&1hf*%@rtLL9=(jZ84a;=~%RU?w_CNEls&S^xVNc-oDHCK_QX=e&Swygw= zt$bTvcp6L?#L0f3t!!MIU87>>Jlh46lyF#vviF~QRY{nPdfD!^6n(o1YCzN_mDZp& z9pSa!0k}_(VNEUgDf(kMeTYJOE9Xy3-vO*3`aAoeLA3NMfkL`nOdNfest(M~H#g_5qefY=(9|Cm3L|D}ISJYXq`-2n zNUoFY=9U~8#u(o>EEpJLE6{P`!B)D}0VcG>qXx+%r5mJ~Y?c@;JeaicfP2GRKRJB$ z^`N%KYX1K0vE>36o~6z5#9rd-VjEsWAdBDWkLI?_Cg~IF`cwPyr*lv;^OQ@#Hzm@p zjlYsdSMB2c^hO#gnAqwi1fFUP7>~tQ8;iw0Z{0o7*NMEW2*kIdPiiyFT1yl6mH(ow z{e-ByA7g-txMkdqGGj-b+r{xhnnf1tLHDpA!nGRzOo+Sd$dp$E?Fy~su;`XeQ;OcV&nA2t$64#IS6bJ|PxN^0OZ{-Vu^lAw4zwF9` z?_zEnTqdS9Wic1!#vExJ3ifw`Lv7@I1ar~9fA^Q&^S|sz1S}+Im$KkxA659q`Ym$~ z9H$B#f7c&Iw|h<%06x1<91G+w3-ny4-mk2_p&Sl|VDCVl7EVtf_8cu(c*xVYep2fs zv1vta8p?4fUm>i9Lk!c|Iu$uwg6e@As;QO3;y;B@9T$ko*K=wNO&`F#3Opu2HKqL6 zO9W}h$zEmW{+aSX#EAY>WI`;_F1tCg!0z(cf6?_*regK%1sG#foZ>~Ss@n(Id6|qT zX`TF__$G{S9R0%8qp3NUOTVuio>vd0noeL;KXv=UgK5+97E(F^*W~M}BScQoFfZ5r z`|<8mNVq6~g4s2>-dfP1f22BG@Sb&M0}K)UxxA z2e_`Jk_Upy1!+UEsR6ry=eXCI&+O^fFUGsE9g3a5 z*b<0*rRx?_Zqj7Q9l4+5C7TfD;e6pM%uRzQ&yeh1#L&#V4iNSY$Ug7J@XxlKWc(EP zfju7&#Q=PMQ*TEG5!O_XsFow{>*T6%LiS>LvLHq^e?llNyA^$!Il)0grji^_3!+wn z3#o12Msr?FAX(_FBiS)k=!r@zdD9l%IVoCz%$z2fELW-hHLcyUe0&_?xzRIZH5kI} zX2q%SVVmM!9HBzh*_})El>0q(b-biD9fS2%uz*lhdyYgtsV992o<0Wv9&SebkzPX) zLuw0ia|X-jY?c$h;aGC%=FpU{L+C+E$9L8n%jH_Qalxt=(w;n&_@$wz zH{t!i(jxDb;J$gT*I_W!QL1EOD1t|cjPpliGCON{3bIjQU7VKHbQdAbp)e~jkg2o- zfR;#n>x9LNpgOfv-UW3~y9OO6luRaf?kVwVX#y$LFDLIqCgpEkuZxnADa;UZ8QWaj zCskAf9wcM|P9^C1W(qxNR{SVUUjyQd?g zY%96BIkl2Fism7VSuLBRY`=}(D+1SS$s`TGf53~x0_)cCq>s~Byk@3N`WG{Yc8vfs zOxmA)JYGI3XCK~#W;e{zRm37Nt*pf|!fyFjoSmGHSD1K;PZ=nXU-J)cR(0t^ad>pO ztx-ft74JeXQImy@np*4K(^dijBJOCS`gn}-kfY40mwRqnijE8On@=!Hg~}2UrK*Jd zdfHjw?@pOt1zJ3uuqFHPg1h0`lwu>acoD5H39aSHg0cPx^RZaoTn4E?u`<7KT*{GT z>j6kONJXJ$`CKP{lou9G!^j9$43lg}03BZGG=F~AKG#u)*C+80PP*qx<8RbH`qv{| z7b!Qr)i}t+xjHR0d8>Qqye72kmn?gT7$^_}J~WJ_+!1+csA0ebz1{WQTX0hG%<#0}1FmI%I=W8$88gqO?CQDFqQe48t) zRK>@FN4kqtH)G zf3GGzYA*6tIoZXFO#0!bt#&~RD(NvX^3+}}ln4rAuD$_(JZzcem+;BmkdZbCSC8*S zso9{l^2&w=s>}MQp_;JehnIlWWgNP)V#akLK-}h?7F<%jt>VIje|YcMJBb|S`Am6Z zzsWMS8kTf%a{+{W^N?GRHwnW4@s zVv2!rsh7&Rpj#Lu7ebdVs?k=BPaqYzFliWL`ngXCCtE)!b<;jvRkS05Tbv!`C|N#H z@m_3Orh7doBZa0DoQz#oJcEELr>Bw=ZpY5+6GIx>pPVhkU)oL!D`2qQZYWsx&D*PV zoEz$*@xB3#SY|7itG^oxsJAK*z`7=h5Fs1l^M<(0imY&l^lo~1D}_pxA_kv1$)YFQWx;AewQdP)y19?G?fdz^!o z@ul$|EbAxaOdsJOE$_5^5}pqbu|acLM;NUfJCW|56W8|s z*lP+Ys6|-IwShSs|F9~$O)wSM32`MlRBh6i6WwI$sGt-ItHbTL)Bj(%~l@C!2UY8?#gCKqcs<EKQ_jI$K=A=+QrK%5W0ic(LP?d5t~} zHnbHMoB-esIg?n0R>;LUJJG8FBX?MGrV_Q|O-4*CdO#wi(gF8Y^v601Mj1rnhfpJ= z!xpGF9R3Ta(Mq*F4_5&0CJM2NjRE4FO3>2HDMi2WhB3s^v`|EU$&spR4Pi;LS4NRBrWVnY5v? zqZbbkc?SRU-J4GiIabB@1J(5#g8R;W|41tqs8@q=-bCEUidDyahj{J!@&lhfunw_n zq*67A1hw~W5IYwHVs*L32$P_d@$>Md z@P`6!)tUrgG<{gmpzN8+U)6%&!yYb1Fo%V}9N*3U7=hIg9pN-iM`I(gA`}5OODHrc zjYwt&9+=X4dLhA;71MMuE#DwIq}gni#$!L7uM8ea$?gEH8j%a#0;K6*JlRz1ctbvS zIA$X_{0?4Js@}SRaVZSo3~{l0u~~wLy#aa@!Im7L8yQ{{+Afu_<`b%)B=5P_a({hg zx{XHdaTnJLbD{zE#&k5V0&x%x-|KBe0}$J;m<=uENI65xaGBj)kNhz;J2{H zI|J6_@cOn*tsmc?^Ha}T+YVMB=7 z-xsCs{=P%}6WG}Bg#!T!RIG;%`X+?|TF}F2n3EQT0O^06On;LifoRxe0K$Qu4Nw~- zHDRDY2++s~7nAf{2@n9lr-ooPatNT3(<&Qs_$AZ>De^iI|G6r1aOD?S!MoZo5Xqj_ zO2y`R^;D6SNoPw5%`@|Qek*aLtj5BHrH-gzR^O4MFQo&nYSEA(aZO0C@|)gMK|9jGzlA*fG$VTeq-J>Cs5H8&LdjKeYv2GSR_%%K$QA6*c;l`Mj z@GXzLL#ZYQrSOdRt;Q>j&+E4=4Wx>TRS15iCft`q{p3PQOV!_(Vs6S2_Hw`rDgGVy zf0ChbK->oC4ZBKM5YT>!s3i@9^3o7MO8b(e@cWmBH3m`FZE{leyYo702{-B(0~~%Fi1eg#`0O50$w(iDpInPg?b7j=SLX(po-R5SLA~7QoImB5h49UL(FQMz9pL@Y7}w3 zY#J^|c4~gI0at2U;~)w-21G1;;LJ+9fQ(b|a@s~maHewe3dkJj4;+j#*>xXpZA=UI z&@Gst8I?vv&sZR%rh~E6F4BXijEz3>S!+4>XLdoP9*?@ENjfTOm3OfV@51CzLE&C}=g4P^8-yXm=|M#4a{3q@t3vG z!_aQXEj_AelJ4S&B4qa)nxDj+k#S^Ir@mlfyd8R&7IymPX-F&UwHG{af_LJVLmqdw zM1H%n@hD+&gIL0+RjyuNj*E!6nY20>QR!4*N<816Vb=EPN$~zops?v=8sj5&&qV9B zJdAIqkXFiH{)PVMo>C%Z+^0AFkEv2 zJ)rpbKAC(G@AE#$gZVLc{0XciGr*ZU9q=r8V*&tu)=31R>Jmc6!hslcnTY@QRfv!1 z?*IFABY@6z$cg`V?DzjG1^}LrL0oz?AQ^o^NTg4oU@0t+k{muLULXAw{2O0(8xQ1De!D|A1yfte^4#fQ6H}s;iT;8>_j8o4b<(h};01_`i_) zZNf0OsCfzS+SK-nLCT+jr4 zmZ!&2Re*qG{)mEy1;Brhkpuo+qo7~|97c1k|6dX(SId9G;#C!3VE?HO^W)ux1^|w9 H{>l9xPQlA= delta 12768 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 J^YNeD{{cN0jN Date: Tue, 11 May 2021 12:56:12 -0700 Subject: [PATCH 020/336] [Excel] Add workbook activated preview sample (#537) * Add workbook activated sample * Update workbook activated sample methods and comments * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Update excel.xlsx metadata file * Incorporate feedback from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../events-workbook-activated.yaml | 80 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 23777 -> 23864 bytes 2 files changed, 80 insertions(+) create mode 100644 samples/excel/85-preview-apis/events-workbook-activated.yaml diff --git a/samples/excel/85-preview-apis/events-workbook-activated.yaml b/samples/excel/85-preview-apis/events-workbook-activated.yaml new file mode 100644 index 000000000..88dee5a7c --- /dev/null +++ b/samples/excel/85-preview-apis/events-workbook-activated.yaml @@ -0,0 +1,80 @@ +order: 5 +id: excel-events-workbook-activated +name: Workbook activated event +description: This sample shows how to register a workbook activated event handler. +host: EXCEL +api_set: + ExcelAPI: '1.13' +script: + content: | + $("#register-event-handler").click(() => tryCatch(registerEventHandler)); + + 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."); + }); + } + + async function registerEventHandler() { + 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."); + }); + } + + /** 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 register a workbook activated event handler.

+

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

+ +
+ 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 diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 5bc14f076afa47535ff60fc93fe7b3baddba0d79..1d8129c89a00a393f402354f960811b1c36e37e1 100644 GIT binary patch delta 14179 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 delta 14063 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 From c0c9d82b82daf084d3024b7b4e25a1d1640fa5ea Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 11 May 2021 16:57:11 -0700 Subject: [PATCH 021/336] Run yarn start (#539) --- playlists-prod/excel.yaml | 21 ++ playlists/excel.yaml | 21 ++ .../events-workbook-activated.yaml | 78 ++--- .../range-direct-dependents.yaml | 302 +++++++++--------- snippet-extractor-output/snippets.yaml | 47 +++ view-prod/excel.json | 2 + view/excel.json | 2 + 7 files changed, 283 insertions(+), 190 deletions(-) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 64187f59e..f5b25c492 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1046,6 +1046,27 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-direct-dependents + name: Direct dependents + fileName: range-direct-dependents.yaml + description: >- + This sample shows how to find and highlight the direct dependents of the + currently selected cell. Dependent cells contain formulas that refer to + other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-direct-dependents.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' +- id: excel-events-workbook-activated + name: Workbook activated event + fileName: events-workbook-activated.yaml + description: This sample shows how to register a workbook activated event handler. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index de2073d66..5bac16e93 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1046,6 +1046,27 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-direct-dependents + name: Direct dependents + fileName: range-direct-dependents.yaml + description: >- + This sample shows how to find and highlight the direct dependents of the + currently selected cell. Dependent cells contain formulas that refer to + other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-direct-dependents.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' +- id: excel-events-workbook-activated + name: Workbook activated event + fileName: events-workbook-activated.yaml + description: This sample shows how to register a workbook activated event handler. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-workbook-activated.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/events-workbook-activated.yaml b/samples/excel/85-preview-apis/events-workbook-activated.yaml index 88dee5a7c..872e85949 100644 --- a/samples/excel/85-preview-apis/events-workbook-activated.yaml +++ b/samples/excel/85-preview-apis/events-workbook-activated.yaml @@ -6,52 +6,52 @@ host: EXCEL api_set: ExcelAPI: '1.13' script: - content: | - $("#register-event-handler").click(() => tryCatch(registerEventHandler)); + content: | + $("#register-event-handler").click(() => tryCatch(registerEventHandler)); - 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."); - }); - } + 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."); + }); + } - async function registerEventHandler() { - await Excel.run(async (context) => { - const workbook = context.workbook; + async function registerEventHandler() { + await Excel.run(async (context) => { + const workbook = context.workbook; - // Register the workbook activated event handler. - workbook.onActivated.add(workbookActivated); + // Register the workbook activated event handler. + workbook.onActivated.add(workbookActivated); - await context.sync(); - console.log("Added event handler for workbook activated."); - }); - } + await context.sync(); + console.log("Added event handler for workbook activated."); + }); + } - /** 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 + /** 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 register a workbook activated event handler.

-

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.

-
+
+

This sample shows how to register a workbook activated event handler.

+

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

- -
+
+

Try it out

+ +
language: html style: content: |- @@ -77,4 +77,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/excel/85-preview-apis/range-direct-dependents.yaml b/samples/excel/85-preview-apis/range-direct-dependents.yaml index c930f0907..e900c3b07 100644 --- a/samples/excel/85-preview-apis/range-direct-dependents.yaml +++ b/samples/excel/85-preview-apis/range-direct-dependents.yaml @@ -6,161 +6,161 @@ host: EXCEL 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)); - - /** Select a cell with direct dependents on the same worksheet. */ - async function selectD3() { - await Excel.run(async (context) => { - // Activate the sample worksheet. - const sheet = context.workbook.worksheets.getItem("Sample2019Data"); - sheet.activate(); - - // Select cell D3. - const range = sheet.getRange("D3"); - range.select(); - await context.sync(); - }); - } - - /** Select a cell with direct dependents across worksheets. */ - async function selectE4() { - await Excel.run(async (context) => { - // Activate the sample worksheet. - const sheet = context.workbook.worksheets.getItem("Sample2019Data"); - sheet.activate(); - - // Select cell E4. - const range = sheet.getRange("E4"); - range.select(); - await context.sync(); - }); - } - - async function getDirectDependents() { - await Excel.run(async (context) => { - // Direct dependents are cells that contain formulas that refer to other cells. - let range = context.workbook.getActiveCell(); - let directDependents = range.getDirectDependents(); - range.load("address"); - directDependents.areas.load("address"); - await context.sync(); - - console.log(`Direct dependent cells of ${range.address}:`); - - // Use the direct dependents API to loop through direct dependents of the active cell. - for (let i = 0; i < directDependents.areas.items.length; i++) { - // Highlight and print the address of each dependent cell. - directDependents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directDependents.areas.items[i].address}`); + content: | + $("#setup").click(() => tryCatch(setup)); + $("#select-D3").click(() => tryCatch(selectD3)); + $("#select-E4").click(() => tryCatch(selectE4)); + $("#get-direct-dependents").click(() => tryCatch(getDirectDependents)); + + /** Select a cell with direct dependents on the same worksheet. */ + async function selectD3() { + await Excel.run(async (context) => { + // Activate the sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample2019Data"); + sheet.activate(); + + // Select cell D3. + const range = sheet.getRange("D3"); + range.select(); + await context.sync(); + }); + } + + /** Select a cell with direct dependents across worksheets. */ + async function selectE4() { + await Excel.run(async (context) => { + // Activate the sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample2019Data"); + sheet.activate(); + + // Select cell E4. + const range = sheet.getRange("E4"); + range.select(); + await context.sync(); + }); + } + + async function getDirectDependents() { + await Excel.run(async (context) => { + // Direct dependents are cells that contain formulas that refer to other cells. + let range = context.workbook.getActiveCell(); + let directDependents = range.getDirectDependents(); + range.load("address"); + directDependents.areas.load("address"); + await context.sync(); + + console.log(`Direct dependent cells of ${range.address}:`); + + // Use the direct dependents API to loop through direct dependents of the active cell. + for (let i = 0; i < directDependents.areas.items.length; i++) { + // Highlight and print the address of each dependent cell. + directDependents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directDependents.areas.items[i].address}`); + } + await context.sync(); + }); } - await context.sync(); - }); - } - /** Create two sample tables on different worksheets with functions that span the tables. */ - async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Sample2019Data").delete(); - context.workbook.worksheets.getItemOrNullObject("Sample2020Data").delete(); - - // Set up the first sample table. - const sheet1 = context.workbook.worksheets.add("Sample2019Data"); - const data1 = [ - ["Product", "Qty", "Unit Price", "Total Price 2019"], - ["Almonds", 2, 7.5, "=C3 * D3"], - ["Coffee", 1, 34.5, "=C4 * D4"], - ["Chocolate", 5, 9.56, "=C5 * D5"] - ]; - - const range1 = sheet1.getRange("B2:E5"); - range1.values = data1; - range1.format.autofitColumns(); - - // Set up the second sample table. - const sheet2 = context.workbook.worksheets.add("Sample2020Data"); - const data2 = [ - ["Product", "Qty", "Unit Price", "Total Price 2020", "Average Annual Price"], - ["Almonds", 2, 8.0, "=C3 * D3", "=Sample2019Data!E3 + E3 / 2"], - ["Coffee", 1, 36.5, "=C4 * D4", "=Sample2019Data!E4 + E4 / 2"], - ["Chocolate", 5, 11.2, "=C5 * D5", "=Sample2019Data!E5 + E5 / 2"] - ]; - const range2 = sheet2.getRange("B2:F5"); - range2.values = data2; - range2.format.autofitColumns(); - - // Style the tables. - const header1 = range1.getRow(0); - header1.format.fill.color = "#4472C4"; - header1.format.font.color = "white"; - const header2 = range2.getRow(0); - header2.format.fill.color = "#4472C4"; - header2.format.font.color = "white"; - sheet2.activate(); - await context.sync(); - }); - } + /** Create two sample tables on different worksheets with functions that span the tables. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample2019Data").delete(); + context.workbook.worksheets.getItemOrNullObject("Sample2020Data").delete(); + + // Set up the first sample table. + const sheet1 = context.workbook.worksheets.add("Sample2019Data"); + const data1 = [ + ["Product", "Qty", "Unit Price", "Total Price 2019"], + ["Almonds", 2, 7.5, "=C3 * D3"], + ["Coffee", 1, 34.5, "=C4 * D4"], + ["Chocolate", 5, 9.56, "=C5 * D5"] + ]; + + const range1 = sheet1.getRange("B2:E5"); + range1.values = data1; + range1.format.autofitColumns(); + + // Set up the second sample table. + const sheet2 = context.workbook.worksheets.add("Sample2020Data"); + const data2 = [ + ["Product", "Qty", "Unit Price", "Total Price 2020", "Average Annual Price"], + ["Almonds", 2, 8.0, "=C3 * D3", "=Sample2019Data!E3 + E3 / 2"], + ["Coffee", 1, 36.5, "=C4 * D4", "=Sample2019Data!E4 + E4 / 2"], + ["Chocolate", 5, 11.2, "=C5 * D5", "=Sample2019Data!E5 + E5 / 2"] + ]; + const range2 = sheet2.getRange("B2:F5"); + range2.values = data2; + range2.format.autofitColumns(); + + // Style the tables. + const header1 = range1.getRow(0); + header1.format.fill.color = "#4472C4"; + header1.format.font.color = "white"; + const header2 = range2.getRow(0); + header2.format.fill.color = "#4472C4"; + header2.format.font.color = "white"; + sheet2.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 + /** 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 find and highlight the dependents of the currently selected cell. Dependent cells contain formulas that refer to other cells.

-
+ content: |- +
+

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

+ +
-
-

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.

- -
- -
- -
- language: html +
+

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.

+ +
+ +
+ +
+ 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 + 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 + 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 9a08bd7a8..1c460b17d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3044,6 +3044,29 @@ } await context.sync(); }); +'Excel.Range#getDirectDependents:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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(); + let directDependents = range.getDirectDependents(); + range.load("address"); + directDependents.areas.load("address"); + await context.sync(); + + console.log(`Direct dependent cells of ${range.address}:`); + + // Use the direct dependents API to loop through direct dependents of the active cell. + for (let i = 0; i < directDependents.areas.items.length; i++) { + // Highlight and print the address of each dependent cell. + directDependents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directDependents.areas.items[i].address}`); + } + await context.sync(); + }); 'Excel.Range#getIntersectionOrNullObject:member(1)': - >- // Link to full sample: @@ -4609,6 +4632,30 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); +'Excel.Workbook#onActivated:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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/85-preview-apis/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.WorkbookProtection#protect:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index b0b86d761..341234ddd 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -110,6 +110,8 @@ "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml", "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml", + "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-direct-dependents.yaml", + "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 665d8b3d1..870ed80e0 100644 --- a/view/excel.json +++ b/view/excel.json @@ -110,6 +110,8 @@ "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml", "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-formula-changed.yaml", + "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-direct-dependents.yaml", + "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-workbook-activated.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 29404995bd65d884197c069363edb6fddef33ec6 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 19 May 2021 13:52:54 -0700 Subject: [PATCH 022/336] [Excel] Add table resize preview sample (#540) * Add table resize code sample * Adjust table resize sample description * Adjust snippet ID, update excel.xlsx metadata file * Run yarn start --- playlists-prod/excel.yaml | 9 ++ playlists/excel.yaml | 9 ++ .../excel/85-preview-apis/resize-table.yaml | 105 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 23864 -> 23940 bytes snippet-extractor-output/snippets.yaml | 15 +++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 140 insertions(+) create mode 100644 samples/excel/85-preview-apis/resize-table.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index f5b25c492..d31f1acce 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1067,6 +1067,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-table-resize + name: Resize a table + fileName: resize-table.yaml + description: This sample shows how to resize a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 5bac16e93..ad6f2edd8 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1067,6 +1067,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-table-resize + name: Resize a table + fileName: resize-table.yaml + description: This sample shows how to resize a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/resize-table.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/resize-table.yaml b/samples/excel/85-preview-apis/resize-table.yaml new file mode 100644 index 000000000..c3cddaa72 --- /dev/null +++ b/samples/excel/85-preview-apis/resize-table.yaml @@ -0,0 +1,105 @@ +order: 6 +id: excel-table-resize +name: Resize a table +description: This sample shows how to resize a table. +host: EXCEL +api_set: + ExcelAPI: '1.13' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#resize-table").click(() => tryCatch(resizeTable)); + + async function resizeTable() { + await Excel.run(async (context) => { + // Retrieve the worksheet and a table on that worksheet. + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + // Resize the table. + expensesTable.resize("A1:D20"); + + await context.sync(); + }); + } + + 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.name = "ExpensesTable"; + + expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + + expensesTable.rows.add(null /*add at the end*/, [ + ["1/1/2017", "The Phone Company", "Communications", "$120"], + ["1/2/2017", "Northwind Electric Cars", "Transportation", "$142"], + ["1/5/2017", "Best For You Organics Company", "Groceries", "$27"], + ["1/10/2017", "Coho Vineyard", "Restaurant", "$33"], + ["1/11/2017", "Bellows College", "Education", "$350"], + ["1/15/2017", "Trey Research", "Other", "$135"], + ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] + ]); + + 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 shows how to resize a 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/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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 1d8129c89a00a393f402354f960811b1c36e37e1..7cd55d8f891f7c79a57a6ca7a85833cc0b47e23e 100644 GIT binary patch delta 14133 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%0A#& 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 QtpP;VCxiN}^&jeg0d|a4P5=M^ delta 14064 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

fKxq8_06LH>|&@ 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 X{V9(2|Mc6go~WZo4lVfoKh*yN!8#LV diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 1c460b17d..34be4668a 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4369,6 +4369,21 @@ await context.sync(); console.log("A handler has been registered for table onSelectionChanged event"); }); +'Excel.Table#resize:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml + + await Excel.run(async (context) => { + // Retrieve the worksheet and a table on that worksheet. + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + // Resize the table. + expensesTable.resize("A1:D20"); + + await context.sync(); + }); 'Excel.TableChangedEventArgs#details:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 341234ddd..3bce1e7e8 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -112,6 +112,7 @@ "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml", "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-direct-dependents.yaml", "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml", + "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 870ed80e0..5b53dcc4a 100644 --- a/view/excel.json +++ b/view/excel.json @@ -112,6 +112,7 @@ "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-formula-changed.yaml", "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-direct-dependents.yaml", "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-workbook-activated.yaml", + "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/resize-table.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From a6f47423adbbda15f7edc576b10222703f690494 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 20 May 2021 10:07:16 -0700 Subject: [PATCH 023/336] [Outlook] Promote 1.10 snippets from preview (#535) * [Outlook] Promote 1.10 snippets from preview * Remove preview comment --- playlists-prod/outlook.yaml | 64 +++++++++---------- playlists/outlook.yaml | 64 +++++++++---------- .../display-existing-appointment.yaml | 1 + .../display-existing-message.yaml | 1 + .../display-new-appointment.yaml | 1 + .../55-display-items/display-new-message.yaml | 1 + .../55-display-items/display-reply-forms.yaml | 1 + .../display-reply-with-attachments.yaml | 1 + .../work-with-client-signatures.yaml | 8 +-- snippet-extractor-output/snippets.yaml | 21 +++--- view-prod/outlook.json | 10 +-- view/outlook.json | 10 +-- 12 files changed, 93 insertions(+), 90 deletions(-) rename samples/outlook/{99-preview-apis => 60-event-based-activation}/work-with-client-signatures.yaml (97%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index e748aee17..d749d6d62 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -268,21 +268,14 @@ group: Recurrence api_set: Mailbox: '1.7' -- id: outlook-display-items-display-existing-appointment - name: Open an appointment - fileName: display-existing-appointment.yaml - description: Displays existing appointment in a separate window - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml - group: Display Items - api_set: - Mailbox: '1.9' -- id: outlook-display-items-display-existing-message - name: Open a message - fileName: display-existing-message.yaml - description: Displays an existing message in a separate window +- id: outlook-display-items-display-new-message + name: Create a new message + fileName: display-new-message.yaml + description: >- + Opens a new message form with a sample content, recipients, and an inline + image attachment rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml group: Display Items api_set: Mailbox: '1.9' @@ -295,14 +288,21 @@ group: Display Items api_set: Mailbox: '1.9' -- id: outlook-display-items-display-new-message - name: Create a new message - fileName: display-new-message.yaml - description: >- - Opens a new message form with a sample content, recipients, and an inline - image attachment +- id: outlook-display-items-display-existing-message + name: Open a message + fileName: display-existing-message.yaml + description: Displays an existing message in a separate window rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- id: outlook-display-items-display-existing-appointment + name: Open an appointment + fileName: display-existing-appointment.yaml + description: Displays existing appointment in a separate window + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml group: Display Items api_set: Mailbox: '1.9' @@ -324,6 +324,17 @@ group: Display Items api_set: Mailbox: '1.9' +- id: outlook-work-with-client-signatures + name: Work with client signatures (Compose) + fileName: work-with-client-signatures.yaml + description: >- + Check if the client signature is enabled, disable the client signature, get + the compose type, and set a signature in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + group: Event Based Activation + api_set: + Mailbox: '1.10' - id: outlook-delegates-and-shared-folders-get-shared-properties name: Perform an operation as delegate fileName: get-shared-properties.yaml @@ -610,16 +621,5 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-work-with-client-signatures - name: Work with client signatures (Compose) - fileName: work-with-client-signatures.yaml - description: >- - Check if the client signature is enabled, disable the client signature, get - the compose type, and set a signature in Compose mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.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 c1ec4bb7c..c948348b2 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -268,21 +268,14 @@ group: Recurrence api_set: Mailbox: '1.7' -- id: outlook-display-items-display-existing-appointment - name: Open an appointment - fileName: display-existing-appointment.yaml - description: Displays existing appointment in a separate window - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-appointment.yaml - group: Display Items - api_set: - Mailbox: '1.9' -- id: outlook-display-items-display-existing-message - name: Open a message - fileName: display-existing-message.yaml - description: Displays an existing message in a separate window +- id: outlook-display-items-display-new-message + name: Create a new message + fileName: display-new-message.yaml + description: >- + Opens a new message form with a sample content, recipients, and an inline + image attachment rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-message.yaml group: Display Items api_set: Mailbox: '1.9' @@ -295,14 +288,21 @@ group: Display Items api_set: Mailbox: '1.9' -- id: outlook-display-items-display-new-message - name: Create a new message - fileName: display-new-message.yaml - description: >- - Opens a new message form with a sample content, recipients, and an inline - image attachment +- id: outlook-display-items-display-existing-message + name: Open a message + fileName: display-existing-message.yaml + description: Displays an existing message in a separate window rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-message.yaml + group: Display Items + api_set: + Mailbox: '1.9' +- id: outlook-display-items-display-existing-appointment + name: Open an appointment + fileName: display-existing-appointment.yaml + description: Displays existing appointment in a separate window + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-appointment.yaml group: Display Items api_set: Mailbox: '1.9' @@ -324,6 +324,17 @@ group: Display Items api_set: Mailbox: '1.9' +- id: outlook-work-with-client-signatures + name: Work with client signatures (Compose) + fileName: work-with-client-signatures.yaml + description: >- + Check if the client signature is enabled, disable the client signature, get + the compose type, and set a signature in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + group: Event Based Activation + api_set: + Mailbox: '1.10' - id: outlook-delegates-and-shared-folders-get-shared-properties name: Perform an operation as delegate fileName: get-shared-properties.yaml @@ -612,14 +623,3 @@ group: Preview APIs api_set: Mailbox: preview -- id: outlook-work-with-client-signatures - name: Work with client signatures (Compose) - fileName: work-with-client-signatures.yaml - description: >- - Check if the client signature is enabled, disable the client signature, get - the compose type, and set a signature in Compose mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/work-with-client-signatures.yaml - group: Preview APIs - api_set: - Mailbox: preview diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index 5d89ddc92..0eb81f3af 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -1,3 +1,4 @@ +order: 4 id: outlook-display-items-display-existing-appointment name: Open an appointment description: Displays existing appointment in a separate window diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index 6a95ab594..2da411b8c 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -1,3 +1,4 @@ +order: 3 id: outlook-display-items-display-existing-message name: Open a message description: Displays an existing message in a separate window diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 727832dd4..1e2eab1b9 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -1,3 +1,4 @@ +order: 2 id: outlook-display-items-display-new-appointment name: Create a new appointment description: Opens a new appointment form with sample content and a few fields populated. diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index fe126b5b7..66d43f9aa 100644 --- a/samples/outlook/55-display-items/display-new-message.yaml +++ b/samples/outlook/55-display-items/display-new-message.yaml @@ -1,3 +1,4 @@ +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' diff --git a/samples/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index fbf9ff7d9..745772799 100644 --- a/samples/outlook/55-display-items/display-reply-forms.yaml +++ b/samples/outlook/55-display-items/display-reply-forms.yaml @@ -1,3 +1,4 @@ +order: 5 id: outlook-display-items-display-reply-forms name: Create replies description: Opens reply and reply-all message forms with sample reply content. 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 ff2d97913..3af4cc04a 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -1,3 +1,4 @@ +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. diff --git a/samples/outlook/99-preview-apis/work-with-client-signatures.yaml b/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml similarity index 97% rename from samples/outlook/99-preview-apis/work-with-client-signatures.yaml rename to samples/outlook/60-event-based-activation/work-with-client-signatures.yaml index 526158f73..ce56dfdc2 100644 --- a/samples/outlook/99-preview-apis/work-with-client-signatures.yaml +++ b/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml @@ -1,9 +1,10 @@ +order: 1 id: outlook-work-with-client-signatures name: Work with client signatures (Compose) description: 'Check if the client signature is enabled, disable the client signature, get the compose type, and set a signature in Compose mode.' host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.10' script: content: | $("#isClientSignatureEnabled").click(isClientSignatureEnabled); @@ -74,7 +75,6 @@ script: if (result.status == Office.AsyncResultStatus.Succeeded) { var signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); - // Important: setSignatureAsync is currently in preview. Office.context.mailbox.item.body.setSignatureAsync( signature, { coercionType: "html" }, @@ -137,8 +137,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/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 34be4668a..136ed39f2 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -6505,7 +6505,7 @@ function(result) { console.log(result); }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Set the signature for the current item with inline image. @@ -6520,7 +6520,6 @@ if (result.status == Office.AsyncResultStatus.Succeeded) { var signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); - // Important: setSignatureAsync is currently in preview. Office.context.mailbox.item.body.setSignatureAsync( signature, { coercionType: "html" }, @@ -6548,7 +6547,7 @@ function(result) { console.log(result); }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Set the signature for the current item with inline image. @@ -6563,7 +6562,6 @@ if (result.status == Office.AsyncResultStatus.Succeeded) { var signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); - // Important: setSignatureAsync is currently in preview. Office.context.mailbox.item.body.setSignatureAsync( signature, { coercionType: "html" }, @@ -8644,7 +8642,7 @@ 'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Get the compose type of the current item (mail only). @@ -8663,7 +8661,7 @@ 'Office.Body#setSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Set the signature for the current item with inline image. @@ -8678,7 +8676,6 @@ if (result.status == Office.AsyncResultStatus.Succeeded) { var signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); - // Important: setSignatureAsync is currently in preview. Office.context.mailbox.item.body.setSignatureAsync( signature, { coercionType: "html" }, @@ -8693,7 +8690,7 @@ ); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Set the signature for the current item. @@ -8712,7 +8709,7 @@ 'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Disable the client signature. @@ -8727,7 +8724,7 @@ 'Office.MessageCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Disable the client signature. @@ -8742,7 +8739,7 @@ 'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Check if the client signature is currently enabled. @@ -8757,7 +8754,7 @@ 'Office.MessageCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml // Check if the client signature is currently enabled. diff --git a/view-prod/outlook.json b/view-prod/outlook.json index becde1ac8..792648df3 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -28,12 +28,13 @@ "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml", "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml", "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", - "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml", - "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml", - "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml", "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml", + "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml", + "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml", + "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml", + "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml", "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", @@ -64,6 +65,5 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml", - "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" + "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 2826b32d8..04d960389 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -28,12 +28,13 @@ "outlook-recurrence-get-series-id": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-series-id.yaml", "outlook-recurrence-get-recurrence-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-recurrence-read.yaml", "outlook-recurrence-get-set-recurrence-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml", - "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-appointment.yaml", - "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-message.yaml", - "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-appointment.yaml", "outlook-display-items-display-new-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-message.yaml", + "outlook-display-items-display-new-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-new-appointment.yaml", + "outlook-display-items-display-existing-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-message.yaml", + "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-with-attachments.yaml", + "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml", "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", @@ -64,6 +65,5 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/session-data-apis.yaml", - "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/work-with-client-signatures.yaml" + "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/session-data-apis.yaml" } \ No newline at end of file From 7460abdee80ce1460333ff9f57d3873ee19cb725 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 21 May 2021 15:53:56 -0700 Subject: [PATCH 024/336] [Excel] Add merged areas preview sample (#543) * Add merged areas code sample * Adjust merged areas code sample * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Add createMergedArea method to merged areas sample * Add createMergedArea method to merged areas sample * Switch 'area' to 'range' to align with existing terminology * Change table variable name to tableRange * Adjust sample ID * Update excel.xlsx metadata file with createMergedRange and getMergedRange methods * Run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 9 ++ playlists/excel.yaml | 9 ++ .../85-preview-apis/range-merged-ranges.yaml | 136 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 23940 -> 24005 bytes snippet-extractor-output/snippets.yaml | 45 ++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 201 insertions(+) create mode 100644 samples/excel/85-preview-apis/range-merged-ranges.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index d31f1acce..f59313c0b 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1076,6 +1076,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-range-merged-ranges + name: Merged ranges + fileName: range-merged-ranges.yaml + description: This sample shows how to create and find merged ranges in a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-merged-ranges.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ad6f2edd8..8ce571b31 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1076,6 +1076,15 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-range-merged-ranges + name: Merged ranges + fileName: range-merged-ranges.yaml + description: This sample shows how to create and find merged ranges in a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-merged-ranges.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/range-merged-ranges.yaml b/samples/excel/85-preview-apis/range-merged-ranges.yaml new file mode 100644 index 000000000..4b1940a9f --- /dev/null +++ b/samples/excel/85-preview-apis/range-merged-ranges.yaml @@ -0,0 +1,136 @@ +order: 7 +id: excel-range-merged-ranges +name: Merged ranges +description: This sample shows how to create and find merged ranges in a worksheet. +host: EXCEL +api_set: + ExcelAPI: '1.13' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#create-merged-range").click(() => tryCatch(createMergedRange)); + $("#get-merged-range").click(() => tryCatch(getMergedRange)); + + async function createMergedRange() { + 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(); + }); + } + + async function getMergedRange() { + 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(); + + // 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(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + // Create a table. + const data = [ + ["Product chart", "", "", ""], + ["Product", "Qty", "Unit Price", "Total Price"], + ["Almonds", 2, 7.5, "=C3 * D3"], + ["Coffee", 1, 34.5, "=C4 * D4"], + ["Chocolate", 5, 9.56, "=C5 * D5"] + ]; + + const tableRange = sheet.getRange("B2:E6"); + tableRange.values = data; + tableRange.format.autofitColumns(); + + // Add a header row to the table. + const header = tableRange.getRow(1); + header.format.fill.color = "#4472C4"; + header.format.font.color = "white"; + + 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 create and find merged ranges in a worksheet.

+
+ +
+

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/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 7cd55d8f891f7c79a57a6ca7a85833cc0b47e23e..e7e2b4842556b8c53296c31f07e93d6ca2e65969 100644 GIT binary patch delta 14218 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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(); + + // 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#getPivotTables:member(1)': - >- // Link to full sample: @@ -3334,6 +3360,25 @@ await context.sync(); }); +'Excel.Range#merge:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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: diff --git a/view-prod/excel.json b/view-prod/excel.json index 3bce1e7e8..31e0625c7 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -113,6 +113,7 @@ "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-direct-dependents.yaml", "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml", "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml", + "excel-range-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-merged-ranges.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 5b53dcc4a..5f988053d 100644 --- a/view/excel.json +++ b/view/excel.json @@ -113,6 +113,7 @@ "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-direct-dependents.yaml", "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-workbook-activated.yaml", "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/resize-table.yaml", + "excel-range-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-merged-ranges.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 950720288ab28d1575cc1e4f2b1e994e64af6b5d Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 24 May 2021 14:40:01 -0700 Subject: [PATCH 025/336] Fix bug in merged ranges preview sample (#546) --- samples/excel/85-preview-apis/range-merged-ranges.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/excel/85-preview-apis/range-merged-ranges.yaml b/samples/excel/85-preview-apis/range-merged-ranges.yaml index 4b1940a9f..2c09a683f 100644 --- a/samples/excel/85-preview-apis/range-merged-ranges.yaml +++ b/samples/excel/85-preview-apis/range-merged-ranges.yaml @@ -61,9 +61,9 @@ script: const data = [ ["Product chart", "", "", ""], ["Product", "Qty", "Unit Price", "Total Price"], - ["Almonds", 2, 7.5, "=C3 * D3"], - ["Coffee", 1, 34.5, "=C4 * D4"], - ["Chocolate", 5, 9.56, "=C5 * D5"] + ["Almonds", 2, 7.5, "=C4 * D4"], + ["Coffee", 1, 34.5, "=C5 * D5"], + ["Chocolate", 5, 9.56, "=C6 * D6"] ]; const tableRange = sheet.getRange("B2:E6"); From 2db5d35ecbd75f2eca259eb99413160a9cc766dc Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 24 May 2021 15:22:29 -0700 Subject: [PATCH 026/336] [Excel] Add range edge preview sample (#544) * Add get range edge preview sample * Add comments and explanation to get range edge sample * Adjust comments * Add table to used range sample, to illustrate used range scenario * Fix formatting * Fix formatting * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Adjust snippet ID, update excel.xlsx metadata file * Run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 11 + playlists/excel.yaml | 11 + .../85-preview-apis/range-get-range-edge.yaml | 229 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 24005 -> 24313 bytes snippet-extractor-output/snippets.yaml | 94 +++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 347 insertions(+) create mode 100644 samples/excel/85-preview-apis/range-get-range-edge.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index f59313c0b..fb4af04e7 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1085,6 +1085,17 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-range-get-range-edge + name: Select used range edge + fileName: range-get-range-edge.yaml + description: >- + This sample shows how to select the edges of the used range, based on the + currently selected range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 8ce571b31..ffb530f6f 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1085,6 +1085,17 @@ group: Preview APIs api_set: ExcelAPI: '1.13' +- id: excel-range-get-range-edge + name: Select used range edge + fileName: range-get-range-edge.yaml + description: >- + This sample shows how to select the edges of the used range, based on the + currently selected range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-get-range-edge.yaml + group: Preview APIs + api_set: + ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/range-get-range-edge.yaml b/samples/excel/85-preview-apis/range-get-range-edge.yaml new file mode 100644 index 000000000..171bda9b3 --- /dev/null +++ b/samples/excel/85-preview-apis/range-get-range-edge.yaml @@ -0,0 +1,229 @@ +order: 8 +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.' +host: EXCEL +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)); + + async function getRangeEdgeLeft() { + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get the left-most cell of the current used range. + // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. + const rangeEdge = range.getRangeEdge( + "Left", // Specify the direction as a string. + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + + // Select the edge of the range. + rangeEdge.select(); + + await context.sync(); + }); + } + + async function getRangeEdgeUp() { + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Specify the direction with the `KeyboardDirection` enum. + const direction = Excel.KeyboardDirection.up; + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get the top-most cell of the current used range. + // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. + const rangeEdge = range.getRangeEdge( + direction, + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + rangeEdge.select(); + + await context.sync(); + }); + } + + async function getExtendedRangeRight() { + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get all the cells from the currently selected range to the right-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( + "Right", // Specify the direction as a string. + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + extendedRange.select(); + + await context.sync(); + }); + } + + async function getExtendedRangeDown() { + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // 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(); + + await context.sync(); + }); + } + + /** Select a range with one cell. */ + async function selectE9() { + await Excel.run(async (context) => { + // Get the active worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Select cell E9. + const range = sheet.getRange("E9"); + range.select(); + await context.sync(); + }); + } + + /** Select a range with multiple cells. */ + async function selectD8E9() { + await Excel.run(async (context) => { + // Get the active worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Select range D8:E9. + const range = sheet.getRange("D8:E9"); + range.select(); + await context.sync(); + }); + } + + 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("C5:F5", true /*hasHeaders*/); + expensesTable.name = "ExpensesTable"; + + expensesTable.getHeaderRowRange().values = [["Date", "Merchant", "Category", "Amount"]]; + + expensesTable.rows.add(null /*add at the end*/, [ + ["1/1/2017", "The Phone Company", "Communications", "$120"], + ["1/2/2017", "Northwind Electric Cars", "Transportation", "$142"], + ["1/5/2017", "Best For You Organics Company", "Groceries", "$27"], + ["1/10/2017", "Coho Vineyard", "Restaurant", "$33"], + ["1/11/2017", "Bellows College", "Education", "$350"], + ["1/15/2017", "Trey Research", "Other", "$135"], + ["1/15/2017", "Best For You Organics Company", "Groceries", "$97"] + ]); + + 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 shows how to select the edges of the used range, based on the currently selected range.

+
+
+

Set up

+ +
+ +
+

Try it out

+ + +
+

The first type of range edge selection selects the cell at the furthest edge of the current used range, in the directions up or left. This action matches the result of using the Ctrl+Arrow key keyboard shortcut while a range is selected.

+ + +
+

The second type of range edge selection selects all the cells from the currently selected range to the furthest edge of the used range, in the directions right or down. This action matches the result of using the Ctrl+Shift+Arrow key keyboard shortcut while a range is selected.

+ + +
+ 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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index e7e2b4842556b8c53296c31f07e93d6ca2e65969..feded5060a4c65ce6a42fc765bcfc3c3631ea116 100644 GIT binary patch delta 15261 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 delta 14937 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml + + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get all the cells from the currently selected range to the right-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( + "Right", // Specify the direction as a string. + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + extendedRange.select(); + + await context.sync(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml + + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // 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(); + await context.sync(); }); 'Excel.Range#getIntersectionOrNullObject:member(1)': @@ -3179,6 +3225,54 @@ console.log(`\t${pivotTable.name}`); }); }); +'Excel.Range#getRangeEdge:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml + + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get the left-most cell of the current used range. + // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. + const rangeEdge = range.getRangeEdge( + "Left", // Specify the direction as a string. + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + + // Select the edge of the range. + rangeEdge.select(); + + await context.sync(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml + + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Specify the direction with the `KeyboardDirection` enum. + const direction = Excel.KeyboardDirection.up; + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get the top-most cell of the current used range. + // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. + const rangeEdge = range.getRangeEdge( + direction, + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + rangeEdge.select(); + + await context.sync(); + }); 'Excel.Range#getSpecialCells:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 31e0625c7..4a47bcddf 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -114,6 +114,7 @@ "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml", "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml", "excel-range-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-merged-ranges.yaml", + "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 5f988053d..de3aa1e9a 100644 --- a/view/excel.json +++ b/view/excel.json @@ -114,6 +114,7 @@ "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-workbook-activated.yaml", "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/resize-table.yaml", "excel-range-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-merged-ranges.yaml", + "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-get-range-edge.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 9bb71c9eef25e6947e62ceaae9a0f88a5f011fe9 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 24 May 2021 17:23:52 -0700 Subject: [PATCH 027/336] [Excel] Update range edge sample (#549) * Remove redundant range edge ref docs samples * Run yarn start --- snippet-extractor-metadata/excel.xlsx | Bin 24313 -> 24257 bytes snippet-extractor-output/snippets.yaml | 44 ------------------------- 2 files changed, 44 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index feded5060a4c65ce6a42fc765bcfc3c3631ea116..df3136284e96d2dc9ec2f5c34049aaaf10578d0e 100644 GIT binary patch delta 13639 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 delta 13751 zcmY*=WmFu%vgY6t+}+*XA$V|i1`WY2xDP>t%i!*A!5xCT6MS%Y55Bo~_w2sypVeP= zwUqU#?%!QdPhC)TlSpto1D20S;5j5F&@N95LzxW`DiQ`XeB1~PT9e$)$aibZou11x zKDZ$sZF}{v!=4X^mmR_#;lroxE;+3yA@(IdNlf>y=u$(i$x4n6-4A3(j(O~mbwv{W#ag`c99rncOH5OdAji?R z8s_O?fje6|qDG0Ii(&-zEHYD?>5sflckt5Jkv4gotTJn;*6!Wtz{!QLo9%5?hJmg4 z$urYuC2du8ezZd12#>Jyk z>VaZ^2gv;>{R`$0T>qu9jjtan463?9jot#uQmYv>>zE@#@Mn)=Gvi{>6xFXYm5+t0 z9H#XhxU?xt&9jYhByY_lhd7d$-+$*l^Bv2;83!>^jtH+N--fyXbX?u@2e8L;&5&J? zjqAJTmef}J!%WfpBUC3>n zcr(^}mN;J=BZJ$BX?dLIX@1+Bya?QYb$_NK?*i+M*;@=y?{MHK&cLV9)d=Xnzq3d3 z6R~@}w3d8S6Z+N4#tJU-2i3N>l%?f2bmJ;h>gvqiUMX`P8R`#LGu*jEzHVioBjBSe znkrgb&`BPkRxVSO?Nt=ept#L4BS&vj7BRRdGR&acY3;=Z9p~JU-Iy6 z>c&_b)@*MXRw8kdDC1@tEy$aJPfg>mx&94BJ5FhAexlK;zRn{QK$$%i5-UiMb zST^J6GGb|Q4rJMGVRQ|U#Bh{bf*P3A^=0s57cEeTiifO5yWeFLl+>-m0ty-bo0y7p znwP~F6nN=dj}(I?!u4Z9&axn4g9ZsEwPfXIth|uP%vnrTf=R$NtZa_aWcmf}D=xrB zI955+p<4KB8>c<@{Wen+yQZ%jU*!kiHS&V4-}LCpWDfS>q1BR=WzFLks2tQf8wY(a zDTCMmC;;H&0|uZ5MubI00xg5w3^4$JzhG2UR*=1iCgYl6l0~&Ptszsws`3N;r1;)I zKNR=p#G}&DhP}}ncNlJ(*_eDMtQl(_qL_E`?zbm*qim725>}(Pi@TRgNLJ3Wkf)43 z`)0NnOHF-GZcbx%`6tb`)o$U9)rY&oN6>5kTJyO|U9;n6c1^qEZCpbGpUFy-O^++F zA?WMDD6if8_NJxxA4ej)NRMw0Ej3f`HwTk(R(6_yO6l89PtjhwpN>oC!QE^h^J||z z-?fmx`#irp7&L77$qo1$Rph)Y`^H{5=wnWCEy8Nf}v66YB36bk#87Wgep>A|Kp5=skcJ~odgO< z`-44?7Hzo72J}A=%t6I?4yB2QK{a}FxNWPgSQ`fIzVF^Y()_%p_#@ibywz4dXw=ZP zl?fl7aZ&O86#Z1W#VGB|lkLwGBC0hX$}Gv#;=?|u&U1n$uksh1p#_sWhr>S~KwVD? zCjXu->rO1G+~*2r{^TyZJlBkx#&eL0Uv_kEQ!Hy#2BJu zP>5r4ct@0Q5oGLZEQkn*AAm zT-XP?KjqVH1<7H9KW;7KRx49x3a6iogQt`07EG)!gVVJ$sS=&~S0)b9lz>Ep=tlJIL&-Qln6$>hSBLmPAxc$8DP8A|%ODUjzq6qjE@KaVoCTFb8raRg3xHw)I7M4jD z#w9z$4v2NOJDW|e?5fY#9;M|&a&iFG)BOagfyJ*;&8azWPJG+&poSoV^l9e>e}}`7 zZOu}9ph&ZK*yDbVhfTU75slom?=6&%1))g(wby>LWpWvb6X7b*>WndKdan;#DO@l? ziD&HFb`4;cvkLYB`VlJ8$Ct)x976HTF}1!10VcVrI=HaUf}6B9u*qH#)$JK4! z_2(y;%x-Tv0BII>rffKRShPXSAq8cLsi%9+_U;J_?I1^~-J*XPPlaOfXDHZfX8eI1X3)Lp55crP zn5$FUzB8q-6TSXXG%|1z5*{2?k+nYkyZipspl(nV(t)oGbOKI+tg?`iC^}*ECT6=I zmNj=VjPEN1>hyZM7%3iSHAx%)WZm%Mqs_H6ApyXt1{jo>F>5MF<{6I1l?I+`Q))kfDxAIw~ zvcR-t!dUT1QZP6Hw4OQ%2JZ1f?*Q_39_2a50=9?~@>%cIT^W;^BYjTb{A2Kj;h zt08KY^Qu2{+<)Cls;$t{d=9&^d?WZ z`mt8esX||y&5ny>%yrj6Ht^1P4=r3PZ`yva6*e#)OnL84T*!pA!mc|VDM=^d>BW() zCnQ_56ojH1$47X&&&gITF?36qe=vaLA#Sr8_ca|Z9yYegrh8cy7o&Wf3!PPzsHl`6 zE)D5uyjBtw^pfrh2I=#S1gVP7#e0Tv2DwEaa3lv=a(L4sFxrO+ru27LO9k+bzDvL3 zZsS;0@q9j?72F<6q$@G3#{m>6bFtpb^TSWYC#FK!xj@6wLf;U+5|rhs$oGYrA%Cs) zq{`M)qEh9V>L{7+=*HBA+))i~E=6PyM^O95Ie+m4ZRXVk(Hn|?%&5m@Gm3vkfeoPc z>wTYGi2fT_LjdSQi@X#)$>KpYZ2TRqLC4%ZK1P_IDBwU=ey{_B8*DkLA>z$D+Fgrw zp3r0yHCEPNsCa=6_8cDVw|Z$a`Mi1nc`yC)F3qhHlbhi{5jvfsXvHaItfV{=7?!Z}u&Cj3c0K}Crm%$J zpyaE1+7UH^C0fHTu77=+G|wf!H@{Tr1XYV9dR#{^o5(}?>h9Bhk2DgrOjn@xVlt3} zxmau>9D@KuNz7AN7eTwhFReXi3kIj1Ao~tk8*zaV*qI%*)|t(@Ad1A+*B8sQh%>B( zU@}L|g^(rHbX3ieKcO&$6m&PJ>Wpr~pxNwPCavcH_Q6*1@EhHg!oBS4TuvMmUF~O@ zWUpcWC`gj|)aVexi9BGMoZ=EUdEj78C{8zzF5GQDQkpxbKrcb6LCqH*dQiT=32J4z z(~n8hI!voBB_?xTLo*?+$|=roHO4TAbg_z!;n&ERsydCV4*M2%#lfm!CmgaNh_^~> zBIOCWYz`jJ{4UDf?$h^aLam=%#OqH)T_S7D#TqCZ849&WH9aMJBO9gbnR9hFAv$?! zbVSq#HoKY;GiIc|2uCNadMiL_A=nT*p)iCRJR#DgEdr7*<9-(TS>Avkg1jbKI2a3J z6&m%86^Fd%@!BuoWd^>?kazoI(DS2VWJyMRSo@jfOOYOxYHs+fBdy8=mXf8$Yyo{0 zjSA9SZiP$XOhT(K)NF-bDqk3Q?!w_x=%NOW2c9n zAtB%ptnq4mD$atwtM7OQj^F$4vMr57w=CSP=ZH>S9h;|41eLK^H~+U7pjqfp5}dKU^A(oBzk$rB9X5F9MGGeb@$gLWuS85Y)A z&-#pp-W`N#eE1NG4Sd@TIzJ?qb@7~v zAdP!?GD^>%L zcs6x4U1JD2!VLIcbxD%-W$EzTo3cCfw%_W*6ZC3!GDv?5u3m9E8cCEj{>Td9F7$#ydI#r+dqpZp;XxL+;QX(M z33q9j5%`080q$JIuphgg-_mx!z7;D@)NkQu9~FM;o2X<8{U;|59<0B6s8Sq_g~;B!uZ789Ue8 z6$n)L!{`SE!ZEj^N6xDTr+>WlKcTdJFEq(^5e2c z2=~VT4e421U4JUZWVYSB%jW^eha@eDmPaH5rVic}m=I zB}zoU&zqXPdMwK=3TMH}m^J+I6KW$$)qGz$h_)xcmj7Jb>xsyBuJ2IZ*{^TOa!mb= zUmc8UOGb01K%P$1mp1DWa0-1gwcCCFR)RpKZC!xr@}*2kle5C+Qei`RHX559mNT+A zXxD=I4DzW|)xn`8nc>Z_l!$F6LAA&tstjdfGiD2%wvMM}j)ciffDExhj;0m!+PKjM zVJG-3YpH|E#G3fr<7&$ntUqmF`$O-}Y~&(BLFYF!(WHmF`wGTYXleTe51Bb&S3s@{ z34Gkdu6aDzcbuuS%iiynifs#11JO1NU@2M}|!=>GbFGl_KWK&Br+Psry2 zM6oY%CS%E47Z+dP3rmEL=bllrzYHvbzACTHNSf4kh0HA7;r2i_eg}O<+Ga*7Jh3jf zcZ=lB#bx?v*&4MO;A40&KVM8B08OkjS)VjpwMt?twBPrSbxc~vSO>G=B?E#sN9<= zJQg7N$B!CQaLtAQbQ5~>Li?!?H9!Ut}<8piaRI z%s{fv3L#77zf7q|)P%rqWvfG9k4!o)Q|9r5DRb?Eb7!_J=C$&Ddz>2&XuF4{m;x@a zuJknDfY=SuhO?#7CsLGA$1fq<0yz~EOz~13@Mg2N`7gKicM&V-4EvI{ujoPyJY*A_ zc8gO4qh`4GC_U>p?;ij#6f6#y&=8{`g%lGSxv(ak&V(EQK=}jyMNR=)b0n5e^fxj6 zkeKOUwbZ$`Tqe__Ar|hPD)`lvYGqL1kWZ_wIP0H2`2He`H(4P$LAyUa}HT;z}lHHdGj=R&HUQz{o=usqwmMn>wW({=zUn#$#O}z_T~Qe?fLsl z=aci>;lcegJNd^`F60B$z47+^?9i}c5)pQ|gub--@RI7u&tL1g$)|d{)UuX3*`U^K z@2Ps)_1ga8bNgJsR&^Mc?tV`?EvNBLZ#5 z0>It=UOSg`t{THwb_SN>D@Ev~y_$xDaN+d*a z>k&F;(^#(p}qV0#pC5}e50Mm*tW>3K&JAb}$v-|b*U_9WLH%_@~Ip+Rp$6LQsW-ci7y8r(0JfO#)iDW}~|i3`Nhdc^%O+j^UE`tKBs0b2@~qy z&_ND%dN)81>SPQbp!+*DOGH9~)6ea>J>)s5^iK3(4<5#f&rZgVpWnRfJU31Dn@D1w z^H1`mpLI&51IUu2H%kf=v4iH~ge0E4agsne81bH~NF&qa(7WT4I8!Qm0q+=&bWWM? zqB$N92Uk1oc)*&+)3{5|war?K=y77duI}SWU;A~o=j2Jq@)!p1^R1I8YZW~#zSz<+s z6;nJL8bgNmq6WD;8L#A@X9vZQoHkijiHj2Dqe|?Qe2x|4|6TU-h9Wi?zCE`#n&2AS zCxI-5ie-O!SuTwK8v#_WnDT1svlPZ0W#wfyBgUo0=Ar8K@?bMkogwRQuRq_)yvS1u zM+b%diM?4|m`K*}(Zi8fmAh2OfW-UR%nV7rp_+xvN>2$!4A=M}!ldV5R*cl!Czplt zVbtd@$GLd7R`8hEv8r#4bhyWK_zXzGJ9r3A?XY< zK^|roo7HCQ@rH}o@l|Is_1N2EvfDS9`r%3|kgI3hk*_{IpS+WrDj4uk*v+ce#p@qe zsS|{dZtGTw8ToBpY#GJaC4`!6=frJl4ZjpPV;xjvmN8oyjN|Bqq+-Fojfa#?C~0*-DiAN2Pc7XLXUe0aLg9`0>F*Tv4{j-o z2^>PFg!On(oFWyoFDDcFE+ThOLa)9GK^URzN|ePn_JkE5U$kDB;koG31Z1v?Vs4 zyvum*jL+}b=iL~yxM|m?iRN=JvZKpNhUJ>Rm25olj_1rk$UTCsq{A{4wsa)hk5suR zL9*)eRhGIX5Zo3FjZ8KZ7k1S_Ri;7loUjs|XEg5TP8Q*FYgy%{_7uIf43o2Wj25ZA z2*?02PAe9wsbY5=R_pApaSOnTRob zDm)>|cz!FLc4&8kqnFgm!NPrpGxvT%0O?N-X*&Eg3+I0N;NC=xg9WL2TBSQWeObiB zDH%lzs+B^-nT0|}K~j`zGN%u-uUYEkDTvHF(K{0OiO{&0x)dT8!9uX=)4!(V^#W_* zPUh(JOJc~mAi&%(o2S>KD5eTk$dYI@MreEKu$PrQn8ioAKd)}UI=HzW#k%X@zq~D? zrN(YiTH1+f;}zI+@%PZ*i1ndy4gvsnhIS{>BKkp9&A1lXc@WtkAF~Sw(n?T`hGwOj zFT)^|z60}!P;)G`Sv$u|Gqii3Fhd zRlXbWGE|!!aFR5Pr`A;6bWn~>GMuobm!{gelu;2IF8wExH&3Gjz?6-;E>PdkHbD<8 zD?ecXSTt2roURZ>L>AlMgn+7f-6a`UXh&=fCH{=E$5H>T{by)RB~uG`YMTE6R;3Rm zIP0XTF8gpbq13PHASM};{|ssPPU<$46$Zn^9vxyG+iFnw04Rf4kRZ8yMRXa1k^7|E zBy5yq__OXw`)?bpJ+OX)<&2D*(4e&bQ6C_7Gz=;y1jP>3<+i_({>^3P?B6m1 zuz#v|ZoyVGH>E5#|5-@qR#c^${kMoC81a27wD`s5psGh>>RBgfOr@CW41@Dj^nX5V ze~?onTTV1W8r0Lb-lIE(2BAv6B^F=2#O3kzr@(rnlNCxf*>W&DA+_~R=sa>q*$N>&AgDH5U?%n zA@sz9b%uN!KcoqFjd3QxOjlomotIdD!t9los*)jV4l*?p+lE%t7PeS}!_Z&@xF3bp zwPedme*G`m8~Ka=H|7zaW?9KyocfH4VQ~emdjjFONT%dZX|hf11j^Ky4IGcPhRIR@ zZFd6U2xKllfey)vCBy^)p-@RGHgPChMde0}3PF3jWFSVDWOB}@ge#%y;5^5WjMbSE ze@ak&$tQ}UXH2!OQEn{vQVeoI1IlF8kWkxpz&{z{_Xd<$&ZX{p_Q{`kd9mFo|Dl`W z$v$0)Ta61w4Q%&`448R9m5XGB+O`Est|QC28<^om^o6#0n)US)mTA^oM$~t*$m-L# z2u6jh^@%9u0J*)QEXbDrIXzbiZx01hkY&QML7M8yCkuBld~u~zK|iUw#>EP8L~Vo6 z`u+eyvh+a=LW1^^%>GoOKOR!azdi0*H5T}_$8<(3&+Mz-#&0Aod59ue+Klf}224`z z8v`z!qqfMUWl5yjFRlaj238!BRK|>x{u2rY^hpcq|AmK$M`woWa~YdjVQCQb7RpXS z1rBt*5Dc{$q!x39(BW3D?w_vKhwE;NYZw2L+b_rG6&}s;rm4U^z;1?4Mj#rgm=v*n zu#b^$5@`o&Pg{Z*H<0nkuTDOqJ^w;#O2c^V6H_Y!)Vm3N{FEixU_bZkFo+wCcqyi| zV!w6X?YRPBmq)Z^*D9eZyC62wybbJ=UO!=;mFS|7Ge(iFaIjByV76?+PyekFNl-tn zztY+juB%NkwJz`QALgL2mPxJ-gUF2|Or$FtSYnGBc`zf=F{nNLOkmojJ)I)vELo(K z08Mk7%w-S-n$k-~PWP61&YPMcO(sVKEh)&sO;8J!g0d-W_Fko3TO12%AGJ`_n@b2M z35sKss~s)3S{7fzyWd(hCmJo(1Rz@$ppe0BbN2Ov2bH}g}&1;OvWLtQKT=Z zl#_Mi#fZ2l0qnr{&uC`!Gh)k2M1vogc$Tux@du`qI2 zetPu&;92q-pbstgb(#HEqv?CX@k_tPK=meN6OM~<%XVArvf_X!PJlDHogUvvThkz@ z9ZUpVe8?HnWoX3TEB^F45Bxerkyuk9)sYXe{jAv40&-(qR{Zf0EZW40m@s8^EuUlQ zsg$&9Q&0s?l!%UpT*M#)Rh_!3Ie!yn-BrNP7$$c zO!GzyE2^pHmtY$AuwbbFC}CMY%+zp=5rm`ougaiE^#2nF7Epu}X4*3OH__Y!qFc_~ zzaY=O`i_eHe&#5HXx#UwQJ)6Pm6`p~apxwyJO_Bm}VOl zL)k5^3-=oA>dfZWt_%oCCbUrOHB--t1L>q+Xpxr&1>kZJq4lE{CQKDWZOn)DpJ+LrMtpGH22{r29{pW**0Z0`y1qTNYnj-GrW%q7|{)5m(y)E*qE;vqiOP> z@UC47$!lsy57DZg+INw*VkxB^udG4)YuF~~(R)qUx2ymFC%YS?9x?T^YcdP=i9PVxF*^qNUxLaQj~51qk#9zCn@+(SdkNO zP^U@k;s-4Ge|G@Vg$Dij3#Sji)Oz_iYNK;>w06d7-#dH1^N_ZkrOXLMUlQnH058H( zB(Drc16$^D3<&gqiCqL*={b0$iF$$SVW zdDhrcfBXgOpd^RkF~SsHO35vWM%weE*nxqgO;f+|CR^-jSuoEoZiETKu~1%2*NX!q zY?J%eyR-jLhtPu|gtYlF$CJXr%QIf~vQtDAF|G2Yc|BsKo`HCTN&ZmWH9?21UD$8d zQSFp98Cl@Z{xv~fWAv;xC>1u^+lKXR`l$l8jFh>qkxKXe^kfKis18F`mubD!pqQ@Z z>jsNTF;tnuFc9r$oC9+j`3-GjGvJD)(CCD>SI>wKd}+CC_eo8dZwTe&Ud2$d%;+XL zcK%!g%xaR=1XtGNC(&iR$`W#t49FO_#$Rr%d^wR>j}@ojKdkTr`BWkNO_D4#A$^Rv zhF&&e#cv!(_;wa$UDo`K_N@rPilhKQq7&8)KB5%b86myFI~o}BCL0#*E$wWrrauC7!cF@vqh}g-Qt__4 z=|f#?>7=$AnEK@|KPPD)ZB0x)@MK3jJw4a`b>FL}ht)Gb5(zewGu*JGCzoP|7N_T4 zt&Ck)*1;vDa`X*xX=F-N4|emkMEph!Sev*ij$QXN(#;qF>0{*Sbg9AkG^G^lAng+Y zpeC=1Vo$^9r(6I{L^**5PO8|F5{jgcZJZVyysp|<^RDTlQwtK5-rv$SKO?PGnWhazdzP4RIuN8hfb1<21EVO=k2wUdponuOu^pN0mZ z$Plm5;NCTW#G~}w;W{;rw9FfLUw={CB!HRWq{4q`2;9<~_~sWz1oaQ)PH*kMSNpXa zeLv2!o7TD)l@mE~2zhd2&&HK>Qv{6Dh2B)$pSVkCnB-G=f9=id6xNbFg%>y7^;XKr zk9|1lZ@ytwD5`WPo;AvpItBFFaNF1HHsN^Q8ek8AVw&jYDqX}+?(@CS>+HfN-8)k= zNyjXUP9LM)9!0~cgm>DnlZRj}+9vYshbjOL+;gItQdf>hGk=IwK5bxSqob!P=|)K` znBXRx9wPp3qYcy@_nTCUu4%YzYd7`k)w5_9nxye&HxC7@YYa~gf4S=(a5IV=_9WfI z{?$GMnvUm2OHpEDpTvdsR1BOciNcSsQZNp&uXz<$!e^&gsWf63u}iIG0hGo>VHE#3 z2`rzJlx%wIeHGjMD^sm4ND-4b<3S2oLHT0JU(2*Cz4`z&G8iJQY@9a3YAgafAtx{SoeTwQ7{0M}Ed7|$8v(R=;L{v7)yi76}xus(e zYW~`kIGT|s{oJV#_NowdR_3;nzXIfH)u8+AV!(FBuIV333Mt(B`HgjqnsXR;yxh`$ zImISNbeUVJL3epd22Y+;0^#)*O5rKNS{Zs5O?(T4XQYFF0C~!AOIeC)jf3d;1fH&7 z>{uZ1?!=Y(u0-kwLH;&MA*F70Eea^2Q`A{vDlJs4)-$`2;y0WDfV$W~8&Cr*)QppC z$^O09wu+Wu?4+(6xCK46)z-3#2vr3tE4M)H+t!ww7sw2~y21*a*Jp*nOtEvvlYw}^?=OrZ2kr1W@_&+X z3>nbDfuWugINa8zA8P6%v!?1TF%7Tp^Y9qD^E)3Pdcf z6>-~%rTH?F;lDk*)uU7nG*+sNQ_m}kr8;cCd%LSrYIQGs&-K(!T|bSst+f>(}wFfL8o))^c;{2m5M z;r4)^B+SoR=U#PXf`P&M2O=PQc zUm+8%DuvZmKmpZw>#8X&t5FwJ!Gn|#?MJ~6#Yc+M08v;n{SGe=F3H({TOIkaYz!Ms>#9>G%fvj zkcClV!nVFB4H{khR&BQr?Vn|hKQ!i4Ps*_tzVe`lu zE@}5;MEIMtvW^!DVG(MuM4O#6LjYc22V^U(r;etU;MmrN-OU#bp)E|)wc9wOMd~}Q z_-W!87?Dr@oMm$nh|_+KGIk6V{4ITiGA1nTyg!GPLPObe?<-avF)ACQu#=ini89{JN;TkNy}?_ z!Z&zte^6A~v9Z!c-X7bfDS_*~^>5UgNZfs!Mfl893GUf!>Abu+8J*9eFMF9`x6a-9 zbquNv!ssK%#oQt-*B1!;7$_S*h;`qGaP0F&n@*Z%@+wvB3{GN1OY+6qgeNgjj4oQI zU#yCDykRI%J@+bJ=Yzfu)q~BPzI(rPV3_~w1x>${&hKbQMltJMUyf)$mBO)pu&{a7 zh2kL~Iu7e4!%dB7iqaZB=Bp)FKq z=N}4LZ3u?=EPdBC#Fp)nY9|qN86TOqw=z{X6VRO3bgxro#a<1gX3L)Cs`KK=`tGt{ z23m54SGcKg+DqWhF9uMoHu*?wm52u?O~4JD=2F(HZ*^LJd$)EoHKzcALjen$NT;(lwDBmPL}-{3f0Snva3D z*nNdRN=FydEi+c=&2F?noKZO`TDWu6bL61KCHB>px~gleH0&!ug}_yjNHz*P=SIb3 zD+nEx*O8&~CI?rHb=5l zce34U%V_BCx1rnepMxu1rm^-wOmh--8BUd#1+#vb2B>c0-c}p)?!MK}IWfSx#edvD zJuyU`3+=~((XN?3DAUtudAL8gLXTlP$SSnh8-{tIYL{HS^Mri;nC;Jc)R9&X@+Hoy zIS^NC))}+y>~mQeTFzf@QR|iU!T&rqt0b!{lQ{MrPl$i2@P%uRff8tSK4<)HVIg0H zx2==J8Ih3P^ItC4WP7XyU8&1E;TPs%^vQl@MhhWzAwGWs8nAS125<2ckD%L*VWey; z{rG@JY1#>Ftz1BJm~u>Dlfxdfj@M1ilkYY-nTtYW#Q^NqXb-=L>ugo%k33wJsS@0U zAvF15yCVK&gMrT8mIHMe>ZbZeHl8E?EH6gwgS5ql1O-5467z|)%j7A<&d-jc?5rHg zFkG&ZMD79Ttvdb6!gjG$e-UcHhD|bDqAktnkUQ_9WKv>PzGM@c9iwEbLky?zm0HK= zu>&cVTz+LKao)oNaV?P-FZR-yXUtHJA(%>tX>9lx+ahZCcp%E`&pe$BHznLOrE{`1 z##u5_%dT7#Q~&arE^a*UHNvF%DKDSVbhR@X7JJR5W3+74K8d>l3zI4O8coqT^8U-WpSaQ8ZW z>wkFazaRH#*{mjixC!w@eVMw=&>Lfb=XC<$ zw1vJ?D>mrp@<4&y9YdO7l0^kEvXuOyMmKaE=He|pULH%%b%Y7J_aUw~`|FDJPZB!6 z(FqLyFnytkR0l*Z6=AW zQRCX^s-hXqy7|L`?*?suP}zaTwVTJVitxkIuveaB^D7c47U_V%@kc({&!Z3=Kk<{U za-qO20;c%9tU(&8ztg9^a=!PHrO{dSZePx=ga%0);4TM$``7K8+Go(&&as6}t6sg_ zJT(#XvS@cOqm_-omU?_V!L8#GlHtEkpmOMD8WSM*%tq?B+>LK0QIN$N_sn5;W)_AA zBKmQyPJh?o|8u-MZ~G&XhHgGSo}mQlIHjqAm_0l4l2en9p1`D+2=KfiLGGC zLyA2eDE7F2$q)bq?$clXKi`^i4Frh)@0Sjl{~Xf)Z1>vG&PzYW(ltC5v3;=l9v%9)^+kbNf&l=%?C4odxZD1pyDm0TcxCW>Ir3Zcj zibE}dg^a|Z9>BgvqR<^0;4BSd@S+h0@&B(d|5E@Y(O3fdN(Vfv!w9xF#`xcA0RCZ& R3l#uPHKu_F82ktQzW|G-zSaN$ diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a4343a986..9e2fea044 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3072,27 +3072,6 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml - await Excel.run(async (context) => { - // Get the selected range. - const range = context.workbook.getSelectedRange(); - - // Get the active cell in the workbook. - const activeCell = context.workbook.getActiveCell(); - - // Get all the cells from the currently selected range to the right-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( - "Right", // Specify the direction as a string. - activeCell // If the selected range contains more than one cell, the active cell must be defined. - ); - extendedRange.select(); - - await context.sync(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml - await Excel.run(async (context) => { // Get the selected range. const range = context.workbook.getSelectedRange(); @@ -3230,29 +3209,6 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml - await Excel.run(async (context) => { - // Get the selected range. - const range = context.workbook.getSelectedRange(); - - // Get the active cell in the workbook. - const activeCell = context.workbook.getActiveCell(); - - // Get the left-most cell of the current used range. - // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. - const rangeEdge = range.getRangeEdge( - "Left", // Specify the direction as a string. - activeCell // If the selected range contains more than one cell, the active cell must be defined. - ); - - // Select the edge of the range. - rangeEdge.select(); - - await context.sync(); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml - await Excel.run(async (context) => { // Get the selected range. const range = context.workbook.getSelectedRange(); From d89d52816e969bd8d6f5ff22ff041f5345d2f984 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 27 May 2021 15:50:43 -0700 Subject: [PATCH 028/336] [Excel] Update insert worksheets sample to throw errors correctly (#550) * Update insert worksheets sample to include try-catch * Change global variable name per feedback * Update excel.xlsx metadata with adjusted insert worksheets methods * Run yarn start --- .../workbook-insert-external-worksheets.yaml | 61 ++++++++++-------- snippet-extractor-metadata/excel.xlsx | Bin 24257 -> 24253 bytes snippet-extractor-output/snippets.yaml | 42 ++++++------ 3 files changed, 59 insertions(+), 44 deletions(-) diff --git a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml index 629474f5e..96d2c2095 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml @@ -7,37 +7,44 @@ api_set: ExcelAPI: '1.13' script: content: | - $("#file").change(() => tryCatch(insertSheets)); + $("#file").change(getBase64); + $("#insert-sheets").click(() => tryCatch(insertSheets)); - async function insertSheets() { + let externalWorkbook; + + async function getBase64() { + // Retrieve the file and set up an HTML FileReader element. const myFile = document.getElementById("file"); const reader = new FileReader(); - + reader.onload = (event) => { - Excel.run((context) => { - // Remove the metadata before the base64-encoded string. - const startIndex = reader.result.toString().indexOf("base64,"); - const workbookContents = reader.result.toString().substr(startIndex + 7); - - // Retrieve the workbook. - const workbook = context.workbook; - - // Set up the insert options. - var 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 workbook. - workbook.insertWorksheetsFromBase64(workbookContents, options); - return context.sync(); - }); + // Remove the metadata before the base64-encoded string. + const startIndex = reader.result.toString().indexOf("base64,"); + externalWorkbook = 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 insertSheets() { + await Excel.run(async (context) => { + // Retrieve the source workbook. + const workbook = context.workbook; + + // Set up the insert options. + var 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(); + }); + } + /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { try { @@ -60,6 +67,11 @@ template:
+
+

Insert the worksheets from the selected workbook.

+
language: html style: @@ -78,12 +90,9 @@ style: 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 + @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 df3136284e96d2dc9ec2f5c34049aaaf10578d0e..fbb50bcc7deddd76795085b914301e409e303477 100644 GIT binary patch delta 14076 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 D!~s*- diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 9e2fea044..2b254ea1c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4632,30 +4632,17 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + // Retrieve the file and set up an HTML FileReader element. + const myFile = document.getElementById("file"); const reader = new FileReader(); reader.onload = (event) => { - Excel.run((context) => { - // Remove the metadata before the base64-encoded string. - const startIndex = reader.result.toString().indexOf("base64,"); - const workbookContents = reader.result.toString().substr(startIndex + 7); - - // Retrieve the workbook. - const workbook = context.workbook; - - // Set up the insert options. - var 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 workbook. - workbook.insertWorksheetsFromBase64(workbookContents, options); - return context.sync(); - }); + // Remove the metadata before the base64-encoded string. + const startIndex = reader.result.toString().indexOf("base64,"); + externalWorkbook = reader.result.toString().substr(startIndex + 7); }; @@ -4663,6 +4650,25 @@ string. reader.readAsDataURL(myFile.files[0]); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + + await Excel.run(async (context) => { + // Retrieve the source workbook. + const workbook = context.workbook; + + // Set up the insert options. + var 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#pivotTables:member': - >- // Link to full sample: From df5dbdd728d8ada2c1a8d081e84784ba5f9eddf9 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 17 Jun 2021 15:34:06 -0700 Subject: [PATCH 029/336] [Excel] (Chart) Update chart activated sample (#552) * Update chart activated sample * Update excel.xlsx with chart sample * Update excel.xlsx with chart sample * Run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Re-run yarn start after incorporating code review changes Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../30-events/events-chart-activated.yaml | 18 +++++++-- snippet-extractor-metadata/excel.xlsx | Bin 24253 -> 24342 bytes snippet-extractor-output/snippets.yaml | 35 ++++++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index febc4ccc8..076d3932c 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -8,15 +8,16 @@ api_set: script: content: |- $("#setup").click(() => tryCatch(setup)); - $("#register-onactivated-deactivated-handlers").click(() => tryCatch(registerActivatonHandlers)); + $("#register-onactivated-deactivated-handlers").click(() => tryCatch(registerActivationHandlers)); $("#create-pie-chart").click(() => tryCatch(createPieChart)); $("#create-cylinder-chart").click(() => tryCatch(createCylinderChart)); - async function registerActivatonHandlers() { + async function registerActivationHandlers() { await Excel.run(async (context) => { const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); + // Register the onActivated and onDeactivated event handlers. pieChart.onActivated.add(chartActivated); pieChart.onDeactivated.add(chartDeactivated); @@ -28,7 +29,16 @@ script: async function chartActivated(event) { await Excel.run(async (context) => { - console.log("The pie chart is the active chart. ID: " + event.chartId); + // Retrieve the worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Retrieve the activated chart by ID and load the name of the chart. + const activatedChart = sheet.charts.getItem(event.chartId); + activatedChart.load(["name"]); + await context.sync(); + + // Print out the activated chart's data. + console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); }); } @@ -168,4 +178,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/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index fbb50bcc7deddd76795085b914301e409e303477..7f81d0fd0bfe2bbf90d92260c5b75e180b5f4eda 100644 GIT binary patch delta 14121 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 delta 13985 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2b254ea1c..720759bdf 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -353,6 +353,41 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + + const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); + + // Register the onActivated and onDeactivated event handlers. + pieChart.onActivated.add(chartActivated); + pieChart.onDeactivated.add(chartDeactivated); + + await context.sync(); + + console.log("Added handlers for Chart onActivated and onDeactivated events."); + }); + - >- + // 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. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Retrieve the activated chart by ID and load the name of the chart. + const activatedChart = sheet.charts.getItem(event.chartId); + activatedChart.load(["name"]); + await context.sync(); + + // Print out the activated chart's data. + console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); + }); + } 'Excel.ChartAxis#displayUnit:member': - >- // Link to full sample: From 1c8d9f4f56d0c44519497ec90199907fbb9c238c Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 22 Jun 2021 10:27:27 -0700 Subject: [PATCH 030/336] [Excel] (Chart) Update chart deactivated sample, pull samples to ChartCollection (#554) * Add comment to chart deactivated method * Add onDeactivated event and ChartCollection to metadata file * Run yarn start --- .../30-events/events-chart-activated.yaml | 1 + snippet-extractor-metadata/excel.xlsx | Bin 24342 -> 24604 bytes snippet-extractor-output/snippets.yaml | 89 ++++++++++++++++++ 3 files changed, 90 insertions(+) diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index 076d3932c..3bd976194 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -44,6 +44,7 @@ script: async function chartDeactivated(event) { await Excel.run(async (context) => { + // Callback function for when the chart is deactivated. console.log("The pie chart is NOT active."); }); } diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 7f81d0fd0bfe2bbf90d92260c5b75e180b5f4eda..594026606ef1063662c5884dba1862c4afafda3d 100644 GIT binary patch delta 13974 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 delta 13713 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 720759bdf..975827f3a 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -388,6 +388,33 @@ console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); }); } +'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 + + await Excel.run(async (context) => { + + const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); + + // Register the onActivated and onDeactivated event handlers. + pieChart.onActivated.add(chartActivated); + pieChart.onDeactivated.add(chartDeactivated); + + await context.sync(); + + console.log("Added handlers for Chart onActivated and onDeactivated events."); + }); + - >- + // 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. + console.log("The pie chart is NOT active."); + }); + } 'Excel.ChartAxis#displayUnit:member': - >- // Link to full sample: @@ -422,6 +449,68 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + + const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); + + // Register the onActivated and onDeactivated event handlers. + pieChart.onActivated.add(chartActivated); + pieChart.onDeactivated.add(chartDeactivated); + + await context.sync(); + + console.log("Added handlers for Chart onActivated and onDeactivated events."); + }); + - >- + // 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. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Retrieve the activated chart by ID and load the name of the chart. + const activatedChart = sheet.charts.getItem(event.chartId); + activatedChart.load(["name"]); + await context.sync(); + + // Print out the activated chart's data. + console.log(`A chart was activated. ID: ${event.chartId}. Chart name: ${activatedChart.name}.`); + }); + } +'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 + + await Excel.run(async (context) => { + + const pieChart = context.workbook.worksheets.getActiveWorksheet().charts.getItem("Pie"); + + // Register the onActivated and onDeactivated event handlers. + pieChart.onActivated.add(chartActivated); + pieChart.onDeactivated.add(chartDeactivated); + + await context.sync(); + + console.log("Added handlers for Chart onActivated and onDeactivated events."); + }); + - >- + // 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. + console.log("The pie chart is NOT active."); + }); + } 'Excel.ChartFill#setSolidColor:member(1)': - >- // Link to full sample: From b336b73d8856ebfbc8d4b9a4d2cc05e9d7993ca0 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 2 Jul 2021 11:05:10 -0700 Subject: [PATCH 031/336] [Excel] Promote ExcelApi 1.13 snippets from preview to GA (#556) * Promote ExcelApi 1.13 snippets from preview to GA * Run yarn start * Update samples/excel/30-events/events-formula-changed.yaml Co-authored-by: Elizabeth Samuel * Update snippet names for consistency * Run yarn start Co-authored-by: Elizabeth Samuel --- playlists-prod/excel.yaml | 160 +++++++++--------- playlists/excel.yaml | 160 +++++++++--------- .../30-events/data-change-event-details.yaml | 2 +- samples/excel/30-events/data-changed.yaml | 2 +- .../events-formula-changed.yaml | 10 +- .../events-workbook-activated.yaml | 6 +- .../30-events/selection-changed-events.yaml | 2 +- .../pivottable-pivotlayout.yaml | 6 +- .../range-direct-dependents.yaml | 9 +- .../range-get-range-edge.yaml | 9 +- .../range-merged-ranges.yaml | 11 +- .../resize-table.yaml | 9 +- .../workbook-insert-external-worksheets.yaml | 9 +- snippet-extractor-metadata/excel.xlsx | Bin 24604 -> 24623 bytes snippet-extractor-output/snippets.yaml | 44 ++--- view-prod/excel.json | 16 +- view/excel.json | 16 +- 17 files changed, 243 insertions(+), 228 deletions(-) rename samples/excel/{85-preview-apis => 30-events}/events-formula-changed.yaml (96%) rename samples/excel/{85-preview-apis => 30-events}/events-workbook-activated.yaml (96%) rename samples/excel/{85-preview-apis => 38-pivottable}/pivottable-pivotlayout.yaml (99%) rename samples/excel/{85-preview-apis => 42-range}/range-direct-dependents.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/range-get-range-edge.yaml (98%) rename samples/excel/{85-preview-apis => 42-range}/range-merged-ranges.yaml (97%) rename samples/excel/{85-preview-apis => 46-table}/resize-table.yaml (97%) rename samples/excel/{85-preview-apis => 50-workbook}/workbook-insert-external-worksheets.yaml (97%) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index fb4af04e7..07e4f61aa 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -331,7 +331,7 @@ api_set: ExcelApi: '1.10' - id: excel-events-data-changed - name: Data change event + name: Data changed event fileName: data-changed.yaml description: Registers an event handler that runs when data is changed. rawUrl: >- @@ -340,7 +340,7 @@ api_set: ExcelApi: '1.4' - id: excel-data-change-event-details - name: Data change event details + name: Data changed event details fileName: data-change-event-details.yaml description: Uses the onChanged event of a table to determine the specifics of changes. rawUrl: >- @@ -358,7 +358,7 @@ api_set: ExcelApi: '1.8' - id: excel-selection-changed-events - name: Selection change events + name: Selection changed events fileName: selection-changed-events.yaml description: >- Registers handlers all the different `onSelectionChanged` events and @@ -430,6 +430,24 @@ group: Events api_set: ExcelAPI: '1.12' +- id: excel-events-formula-changed + name: Formula changed event + fileName: events-formula-changed.yaml + description: Registers an event handler to detect changes to formulas. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml + group: Events + api_set: + ExcelAPI: '1.13' +- id: excel-events-workbook-activated + name: Workbook activated event + fileName: events-workbook-activated.yaml + description: This sample shows how to register a workbook activated event handler. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + group: Events + api_set: + ExcelAPI: '1.13' - id: excel-named-item-create-and-remove-named-item name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml @@ -504,6 +522,15 @@ group: PivotTable api_set: ExcelAPI: '1.12' +- id: excel-pivottable-pivotlayout + name: PivotLayout + fileName: pivottable-pivotlayout.yaml + description: Sets PivotTable layout settings through the PivotLayout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + group: PivotTable + api_set: + ExcelAPI: '1.13' - id: excel-range-auto-fill name: Auto fill fileName: range-auto-fill.yaml @@ -679,6 +706,38 @@ group: Range api_set: ExcelApi: '1.4' +- id: excel-merged-ranges + name: Merged ranges + fileName: range-merged-ranges.yaml + description: This sample shows how to create and find merged ranges in a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml + group: Range + api_set: + ExcelAPI: '1.13' +- id: excel-range-get-range-edge + name: Select used range edge + fileName: range-get-range-edge.yaml + description: >- + This sample shows how to select the edges of the used range, based on the + currently selected range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-get-range-edge.yaml + group: Range + api_set: + ExcelAPI: '1.13' +- id: excel-direct-dependents + name: Direct dependents + fileName: range-direct-dependents.yaml + description: >- + This sample shows how to find and highlight the direct dependents of the + currently selected cell. Dependent cells contain formulas that refer to + other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.yaml + group: Range + api_set: + ExcelAPI: '1.13' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml @@ -816,6 +875,15 @@ group: Table api_set: ExcelApi: '1.4' +- id: excel-table-resize + name: Resize a table + fileName: resize-table.yaml + description: This sample shows how to resize a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/resize-table.yaml + group: Table + api_set: + ExcelAPI: '1.13' - id: excel-workbook-get-active-cell name: Active cell fileName: workbook-get-active-cell.yaml @@ -898,6 +966,15 @@ group: Workbook api_set: ExcelAPI: '1.11' +- id: excel-workbook-insert-external-worksheets + name: Insert external worksheets + fileName: workbook-insert-external-worksheets.yaml + description: Inserts worksheets from another workbook into the current workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml + group: Workbook + api_set: + ExcelAPI: '1.13' - id: excel-worksheet-active-worksheet name: Active worksheet fileName: active-worksheet.yaml @@ -1019,83 +1096,6 @@ group: Worksheet api_set: ExcelApi: '1.1' -- id: excel-workbook-insert-external-worksheets - name: Insert external worksheets - fileName: workbook-insert-external-worksheets.yaml - description: Inserts worksheets from another workbook into the current workbook. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-pivottable-pivotlayout - name: PivotLayout - fileName: pivottable-pivotlayout.yaml - description: Sets PivotTable layout settings through the PivotLayout. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-events-formula-changed - name: Formula change event - fileName: events-formula-changed.yaml - description: Registers an event handler to detect changes to formulas. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-direct-dependents - name: Direct dependents - fileName: range-direct-dependents.yaml - description: >- - This sample shows how to find and highlight the direct dependents of the - currently selected cell. Dependent cells contain formulas that refer to - other cells. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-direct-dependents.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-events-workbook-activated - name: Workbook activated event - fileName: events-workbook-activated.yaml - description: This sample shows how to register a workbook activated event handler. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-table-resize - name: Resize a table - fileName: resize-table.yaml - description: This sample shows how to resize a table. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-range-merged-ranges - name: Merged ranges - fileName: range-merged-ranges.yaml - description: This sample shows how to create and find merged ranges in a worksheet. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-merged-ranges.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-range-get-range-edge - name: Select used range edge - fileName: range-get-range-edge.yaml - description: >- - This sample shows how to select the edges of the used range, based on the - currently selected range. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ffb530f6f..cbda5fd40 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -331,7 +331,7 @@ api_set: ExcelApi: '1.10' - id: excel-events-data-changed - name: Data change event + name: Data changed event fileName: data-changed.yaml description: Registers an event handler that runs when data is changed. rawUrl: >- @@ -340,7 +340,7 @@ api_set: ExcelApi: '1.4' - id: excel-data-change-event-details - name: Data change event details + name: Data changed event details fileName: data-change-event-details.yaml description: Uses the onChanged event of a table to determine the specifics of changes. rawUrl: >- @@ -358,7 +358,7 @@ api_set: ExcelApi: '1.8' - id: excel-selection-changed-events - name: Selection change events + name: Selection changed events fileName: selection-changed-events.yaml description: >- Registers handlers all the different `onSelectionChanged` events and @@ -430,6 +430,24 @@ group: Events api_set: ExcelAPI: '1.12' +- id: excel-events-formula-changed + name: Formula changed event + fileName: events-formula-changed.yaml + description: Registers an event handler to detect changes to formulas. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-formula-changed.yaml + group: Events + api_set: + ExcelAPI: '1.13' +- id: excel-events-workbook-activated + name: Workbook activated event + fileName: events-workbook-activated.yaml + description: This sample shows how to register a workbook activated event handler. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-activated.yaml + group: Events + api_set: + ExcelAPI: '1.13' - id: excel-named-item-create-and-remove-named-item name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml @@ -504,6 +522,15 @@ group: PivotTable api_set: ExcelAPI: '1.12' +- id: excel-pivottable-pivotlayout + name: PivotLayout + fileName: pivottable-pivotlayout.yaml + description: Sets PivotTable layout settings through the PivotLayout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotlayout.yaml + group: PivotTable + api_set: + ExcelAPI: '1.13' - id: excel-range-auto-fill name: Auto fill fileName: range-auto-fill.yaml @@ -679,6 +706,38 @@ group: Range api_set: ExcelApi: '1.4' +- id: excel-merged-ranges + name: Merged ranges + fileName: range-merged-ranges.yaml + description: This sample shows how to create and find merged ranges in a worksheet. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-merged-ranges.yaml + group: Range + api_set: + ExcelAPI: '1.13' +- id: excel-range-get-range-edge + name: Select used range edge + fileName: range-get-range-edge.yaml + description: >- + This sample shows how to select the edges of the used range, based on the + currently selected range. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-get-range-edge.yaml + group: Range + api_set: + ExcelAPI: '1.13' +- id: excel-direct-dependents + name: Direct dependents + fileName: range-direct-dependents.yaml + description: >- + This sample shows how to find and highlight the direct dependents of the + currently selected cell. Dependent cells contain formulas that refer to + other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-direct-dependents.yaml + group: Range + api_set: + ExcelAPI: '1.13' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml @@ -816,6 +875,15 @@ group: Table api_set: ExcelApi: '1.4' +- id: excel-table-resize + name: Resize a table + fileName: resize-table.yaml + description: This sample shows how to resize a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/resize-table.yaml + group: Table + api_set: + ExcelAPI: '1.13' - id: excel-workbook-get-active-cell name: Active cell fileName: workbook-get-active-cell.yaml @@ -898,6 +966,15 @@ group: Workbook api_set: ExcelAPI: '1.11' +- id: excel-workbook-insert-external-worksheets + name: Insert external worksheets + fileName: workbook-insert-external-worksheets.yaml + description: Inserts worksheets from another workbook into the current workbook. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml + group: Workbook + api_set: + ExcelAPI: '1.13' - id: excel-worksheet-active-worksheet name: Active worksheet fileName: active-worksheet.yaml @@ -1019,83 +1096,6 @@ group: Worksheet api_set: ExcelApi: '1.1' -- id: excel-workbook-insert-external-worksheets - name: Insert external worksheets - fileName: workbook-insert-external-worksheets.yaml - description: Inserts worksheets from another workbook into the current workbook. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-pivottable-pivotlayout - name: PivotLayout - fileName: pivottable-pivotlayout.yaml - description: Sets PivotTable layout settings through the PivotLayout. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-events-formula-changed - name: Formula change event - fileName: events-formula-changed.yaml - description: Registers an event handler to detect changes to formulas. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-formula-changed.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-direct-dependents - name: Direct dependents - fileName: range-direct-dependents.yaml - description: >- - This sample shows how to find and highlight the direct dependents of the - currently selected cell. Dependent cells contain formulas that refer to - other cells. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-direct-dependents.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-events-workbook-activated - name: Workbook activated event - fileName: events-workbook-activated.yaml - description: This sample shows how to register a workbook activated event handler. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-workbook-activated.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-table-resize - name: Resize a table - fileName: resize-table.yaml - description: This sample shows how to resize a table. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/resize-table.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-range-merged-ranges - name: Merged ranges - fileName: range-merged-ranges.yaml - description: This sample shows how to create and find merged ranges in a worksheet. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-merged-ranges.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' -- id: excel-range-get-range-edge - name: Select used range edge - fileName: range-get-range-edge.yaml - description: >- - This sample shows how to select the edges of the used range, based on the - currently selected range. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-get-range-edge.yaml - group: Preview APIs - api_set: - ExcelAPI: '1.13' - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 2fb735c4f..2b3ecaf9a 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -1,6 +1,6 @@ order: 5 id: excel-data-change-event-details -name: Data change event details +name: Data changed event details description: Uses the onChanged event of a table to determine the specifics of changes. host: EXCEL api_set: diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index cb790701b..a72583037 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -1,6 +1,6 @@ order: 4 id: excel-events-data-changed -name: Data change event +name: Data changed event description: Registers an event handler that runs when data is changed. author: OfficeDev host: EXCEL diff --git a/samples/excel/85-preview-apis/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml similarity index 96% rename from samples/excel/85-preview-apis/events-formula-changed.yaml rename to samples/excel/30-events/events-formula-changed.yaml index 7094aa14d..f22fddd9c 100644 --- a/samples/excel/85-preview-apis/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -1,6 +1,6 @@ -order: 3 +order: 14 id: excel-events-formula-changed -name: Formula change event +name: Formula changed event description: Registers an event handler to detect changes to formulas. host: EXCEL api_set: @@ -118,8 +118,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 @@ -128,4 +128,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/85-preview-apis/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml similarity index 96% rename from samples/excel/85-preview-apis/events-workbook-activated.yaml rename to samples/excel/30-events/events-workbook-activated.yaml index 872e85949..1e774b614 100644 --- a/samples/excel/85-preview-apis/events-workbook-activated.yaml +++ b/samples/excel/30-events/events-workbook-activated.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 15 id: excel-events-workbook-activated name: Workbook activated event description: This sample shows how to register a workbook activated event handler. @@ -67,8 +67,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/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index 3a3a96e4c..7ebef8e30 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -1,6 +1,6 @@ order: 7 id: excel-selection-changed-events -name: Selection change events +name: Selection changed events description: Registers handlers all the different `onSelectionChanged` events and displays how each event reports the selected addresses. author: OfficeDev host: EXCEL diff --git a/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml similarity index 99% rename from samples/excel/85-preview-apis/pivottable-pivotlayout.yaml rename to samples/excel/38-pivottable/pivottable-pivotlayout.yaml index d72f8fcac..34a8bc871 100644 --- a/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 7 id: excel-pivottable-pivotlayout name: PivotLayout description: Sets PivotTable layout settings through the PivotLayout. @@ -310,8 +310,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/excel/85-preview-apis/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml similarity index 98% rename from samples/excel/85-preview-apis/range-direct-dependents.yaml rename to samples/excel/42-range/range-direct-dependents.yaml index e900c3b07..0fc62c93d 100644 --- a/samples/excel/85-preview-apis/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 21 id: excel-direct-dependents name: Direct dependents description: This sample shows how to find and highlight the direct dependents of the currently selected cell. Dependent cells contain formulas that refer to other cells. @@ -156,11 +156,14 @@ 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 + 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/excel/85-preview-apis/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml similarity index 98% rename from samples/excel/85-preview-apis/range-get-range-edge.yaml rename to samples/excel/42-range/range-get-range-edge.yaml index 171bda9b3..a16b965c3 100644 --- a/samples/excel/85-preview-apis/range-get-range-edge.yaml +++ b/samples/excel/42-range/range-get-range-edge.yaml @@ -1,4 +1,4 @@ -order: 8 +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.' @@ -219,11 +219,14 @@ 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 + 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/excel/85-preview-apis/range-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml similarity index 97% rename from samples/excel/85-preview-apis/range-merged-ranges.yaml rename to samples/excel/42-range/range-merged-ranges.yaml index 2c09a683f..0961a0015 100644 --- a/samples/excel/85-preview-apis/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -1,5 +1,5 @@ -order: 7 -id: excel-range-merged-ranges +order: 19 +id: excel-merged-ranges name: Merged ranges description: This sample shows how to create and find merged ranges in a worksheet. host: EXCEL @@ -126,11 +126,14 @@ 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 + 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/excel/85-preview-apis/resize-table.yaml b/samples/excel/46-table/resize-table.yaml similarity index 97% rename from samples/excel/85-preview-apis/resize-table.yaml rename to samples/excel/46-table/resize-table.yaml index c3cddaa72..999354183 100644 --- a/samples/excel/85-preview-apis/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 10 id: excel-table-resize name: Resize a table description: This sample shows how to resize a table. @@ -95,11 +95,14 @@ 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 + 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/excel/85-preview-apis/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml similarity index 97% rename from samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml rename to samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 96d2c2095..35210ad38 100644 --- a/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 9 id: excel-workbook-insert-external-worksheets name: Insert external worksheets description: Inserts worksheets from another workbook into the current workbook. @@ -88,11 +88,14 @@ 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 + 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 594026606ef1063662c5884dba1862c4afafda3d..5a1059f54fd02f21f4a6a6492cb5b29d19000989 100644 GIT binary patch delta 9706 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2707,7 +2707,7 @@ 'Excel.PivotLayout#displayBlankLineAfterEachItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2722,7 +2722,7 @@ 'Excel.PivotLayout#emptyCellText:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2738,7 +2738,7 @@ 'Excel.PivotLayout#fillEmptyCells:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2798,7 +2798,7 @@ 'Excel.PivotLayout#layoutType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2821,7 +2821,7 @@ 'Excel.PivotLayout#preserveFormatting:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2840,7 +2840,7 @@ 'Excel.PivotLayout#repeatAllItemLabels:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2855,7 +2855,7 @@ 'Excel.PivotLayout#showColumnGrandTotals:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2878,7 +2878,7 @@ 'Excel.PivotLayout#showFieldHeaders:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -2895,7 +2895,7 @@ 'Excel.PivotLayout#showRowGrandTotals:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml + 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. @@ -3171,7 +3171,7 @@ 'Excel.Range#getDirectDependents:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-direct-dependents.yaml + 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. @@ -3194,7 +3194,7 @@ 'Excel.Range#getExtendedRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml + 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. @@ -3278,7 +3278,7 @@ 'Excel.Range#getMergedAreasOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-merged-ranges.yaml + 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. @@ -3331,7 +3331,7 @@ 'Excel.Range#getRangeEdge:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml + 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. @@ -3537,7 +3537,7 @@ 'Excel.Range#merge:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-merged-ranges.yaml + 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. @@ -4591,7 +4591,7 @@ 'Excel.Table#resize:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml + 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. @@ -4754,7 +4754,7 @@ 'Excel.Workbook#insertWorksheetsFromBase64:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + 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. @@ -4776,7 +4776,7 @@ reader.readAsDataURL(myFile.files[0]); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml + 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. @@ -4875,7 +4875,7 @@ 'Excel.Workbook#onActivated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.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) => { @@ -4885,7 +4885,7 @@ } - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml + 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; @@ -5148,7 +5148,7 @@ 'Excel.Worksheet#onFormulaChanged:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml + 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". @@ -5162,7 +5162,7 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml async function formulaChangeHandler(event: Excel.WorksheetFormulaChangedEventArgs) { diff --git a/view-prod/excel.json b/view-prod/excel.json index 4a47bcddf..5f7ea79ba 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -45,6 +45,8 @@ "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", "excel-events-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml", "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml", + "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml", + "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml", "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/update-named-item.yaml", "excel-pivottable-calculations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml", @@ -53,6 +55,7 @@ "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", + "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml", @@ -71,6 +74,9 @@ "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml", "excel-range-used-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.yaml", "excel-range-values-and-formulas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/set-get-values.yaml", + "excel-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml", + "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-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", @@ -86,6 +92,7 @@ "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", "excel-table-import-json-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/import-json-data.yaml", "excel-table-sort-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/sort-data.yaml", + "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/46-table/resize-table.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/create-get-change-delete-settings.yaml", "excel-workbook-calculation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-calculation.yaml", @@ -94,6 +101,7 @@ "excel-culture-info-date-time": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/culture-info-date-time.yaml", "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-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", @@ -107,14 +115,6 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml", - "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-formula-changed.yaml", - "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-direct-dependents.yaml", - "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/events-workbook-activated.yaml", - "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/resize-table.yaml", - "excel-range-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-merged-ranges.yaml", - "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-get-range-edge.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index de3aa1e9a..8776fe57b 100644 --- a/view/excel.json +++ b/view/excel.json @@ -45,6 +45,8 @@ "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", "excel-events-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-worksheet.yaml", "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-comment-event-handler.yaml", + "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-formula-changed.yaml", + "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-activated.yaml", "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/create-and-remove-named-item.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/update-named-item.yaml", "excel-pivottable-calculations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-calculations.yaml", @@ -53,6 +55,7 @@ "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", + "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotlayout.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-areas.yaml", @@ -71,6 +74,9 @@ "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/dynamic-arrays.yaml", "excel-range-used-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/used-range.yaml", "excel-range-values-and-formulas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/set-get-values.yaml", + "excel-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-merged-ranges.yaml", + "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-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", @@ -86,6 +92,7 @@ "excel-table-get-visible-range-of-a-filtered-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/get-visible-range-of-a-filtered-table.yaml", "excel-table-import-json-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/import-json-data.yaml", "excel-table-sort-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/sort-data.yaml", + "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/46-table/resize-table.yaml", "excel-workbook-get-active-cell": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-get-active-cell.yaml", "excel-settings-create-get-change-delete-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/create-get-change-delete-settings.yaml", "excel-workbook-calculation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/workbook-calculation.yaml", @@ -94,6 +101,7 @@ "excel-culture-info-date-time": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/50-workbook/culture-info-date-time.yaml", "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-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", @@ -107,14 +115,6 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-workbook-insert-external-worksheets": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/workbook-insert-external-worksheets.yaml", - "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-pivotlayout.yaml", - "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-formula-changed.yaml", - "excel-direct-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-direct-dependents.yaml", - "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/events-workbook-activated.yaml", - "excel-table-resize": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/resize-table.yaml", - "excel-range-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-merged-ranges.yaml", - "excel-range-get-range-edge": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-get-range-edge.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 8b241485870fa15323e64742297d98fff0e49dfb Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 5 Aug 2021 15:04:23 -0700 Subject: [PATCH 032/336] Remove unnecessary npm dependency (#558) --- package.json | 1 - yarn.lock | 1854 ++------------------------------------------------ 2 files changed, 60 insertions(+), 1795 deletions(-) diff --git a/package.json b/package.json index a6cc8fd25..bdf14c859 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "js-yaml": "^3.13.1", "lodash": "^4.17.21", "node-status": "^1.0.0", - "npm": "^7.5.3", "rimraf": "^3.0.0", "shelljs": "^0.8.3" }, diff --git a/yarn.lock b/yarn.lock index 73e6f454d..7d51b3206 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,166 +3,26 @@ "@babel/code-frame@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== dependencies: - "@babel/highlight" "^7.12.13" + "@babel/highlight" "^7.14.5" -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.14.5": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== -"@babel/highlight@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" - integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.14.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@npmcli/arborist@^2.0.0", "@npmcli/arborist@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.2.1.tgz#5fbf3b697f3315be124e3477c17793ad9a68828a" - integrity sha512-J76nY+TYhxNLFAnWy1HqfjszC6dHy5zxHHFt1LJ2pgBDcb00ipNAbTX0qtyv6FPTF67hPErmPKePaKtFr5KvEA== - dependencies: - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/map-workspaces" "^1.0.2" - "@npmcli/metavuln-calculator" "^1.0.1" - "@npmcli/move-file" "^1.1.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^1.0.1" - "@npmcli/run-script" "^1.8.2" - bin-links "^2.2.1" - cacache "^15.0.3" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.1" - mkdirp-infer-owner "^2.0.0" - npm-install-checks "^4.0.0" - npm-package-arg "^8.1.0" - npm-pick-manifest "^6.1.0" - npm-registry-fetch "^9.0.0" - pacote "^11.2.6" - parse-conflict-json "^1.1.1" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.1" - readdir-scoped-modules "^1.1.0" - semver "^7.3.4" - tar "^6.1.0" - treeverse "^1.0.4" - walk-up-path "^1.0.0" - -"@npmcli/ci-detect@^1.0.0", "@npmcli/ci-detect@^1.2.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" - integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== - -"@npmcli/config@^1.2.9": - version "1.2.9" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-1.2.9.tgz#75bde611c08762ab7a9814c076d7f287ba020088" - integrity sha512-d7mx35ju9HFg0gNHiwMU0HXCJk1esAeRdMktLeD+K2K2awkZyEm1FyX+g8iuZbmWGAaFP/aGiXo7a0lKlmp6Xg== - dependencies: - ini "^2.0.0" - mkdirp-infer-owner "^2.0.0" - nopt "^5.0.0" - semver "^7.3.4" - walk-up-path "^1.0.0" - -"@npmcli/disparity-colors@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-1.0.1.tgz#b23c864c9658f9f0318d5aa6d17986619989535c" - integrity sha512-kQ1aCTTU45mPXN+pdAaRxlxr3OunkyztjbbxDY/aIcPS5CnCUrx+1+NvA6pTcYR7wmLZe37+Mi5v3nfbwPxq3A== - dependencies: - ansi-styles "^4.3.0" - -"@npmcli/git@^2.0.1", "@npmcli/git@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.4.tgz#725f5e32864f3849420e84baf130e426a707cbb7" - integrity sha512-OJZCmJ9DNn1cz9HPXXsPmUBnqaArot3CGYo63CyajHQk+g87rPXVOJByGsskQJhPsUUEXJcsZ2Q6bWd2jSwnBA== - dependencies: - "@npmcli/promise-spawn" "^1.1.0" - lru-cache "^6.0.0" - mkdirp "^1.0.3" - npm-pick-manifest "^6.0.0" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - semver "^7.3.2" - unique-filename "^1.1.1" - which "^2.0.2" - -"@npmcli/installed-package-contents@^1.0.6", "@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== - dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -"@npmcli/map-workspaces@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.2.tgz#77f2400470cdc1d61731ba34a85c577ade1616b9" - integrity sha512-12nBSZ0EI/jRtCCjjQXF+1Twvj+ecxtBXFRomrTXR0xWn8oppc/OM53aPpPG5EnQWrKAAnOS/hEIATm6kxKz/A== - dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^7.1.6" - minimatch "^3.0.4" - read-package-json-fast "^2.0.1" - -"@npmcli/metavuln-calculator@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.0.2.tgz#4332b3840c95c1aba1a518bab958cd9c6b870b56" - integrity sha512-mQuOq4sZYOdjz49KH/DUwL+FsLVxiN5KDO/bnBXFon+kUxGHDoUYL+bvOD1o00IYL1q3LtXoPlFlQ+OYJQffhw== - dependencies: - cacache "^15.0.5" - pacote "^11.1.11" - semver "^7.3.2" - -"@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.1.tgz#31a3afae95308ef12f58ac147b3e33aae621241d" - integrity sha512-LtWTicuF2wp7PNTuyCwABx7nNG+DnzSE8gN0iWxkC6mpgm/iOPu0ZMTkXuCxmJxtWFsDxUaixM9COSNJEMUfuQ== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== - -"@npmcli/node-gyp@^1.0.1", "@npmcli/node-gyp@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz#3cdc1f30e9736dbc417373ed803b42b1a0a29ede" - integrity sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg== - -"@npmcli/promise-spawn@^1.1.0", "@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" - integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== - dependencies: - infer-owner "^1.0.4" - -"@npmcli/run-script@^1.3.0", "@npmcli/run-script@^1.8.2": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.3.tgz#07f440ed492400bb1114369bc37315eeaaae2bb3" - integrity sha512-ELPGWAVU/xyU+A+H3pEPj0QOvYwLTX71RArXcClFzeiyJ/b/McsZ+d0QxpznvfFtZzxGN/gz/1cvlqICR4/suQ== - dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - infer-owner "^1.0.4" - node-gyp "^7.1.0" - puka "^1.0.1" - read-package-json-fast "^2.0.1" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@types/chalk@0.4.31": version "0.4.31" resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" @@ -176,100 +36,51 @@ "@types/node" "*" "@types/glob@*": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/js-yaml@^3.12.0": - version "3.12.6" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.6.tgz#7f10c926aa41e189a2755c4c7fcf8e4573bd7ac1" - integrity sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ== + version "3.12.7" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.7.tgz#330c5d97a3500e9c903210d6e49f02964af04a0e" + integrity sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ== "@types/lodash@^4.14.122": - version "4.14.168" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" - integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + version "4.14.172" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.172.tgz#aad774c28e7bfd7a67de25408e03ee5a8c3d028a" + integrity sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw== "@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "14.14.25" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93" - integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ== + version "16.4.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.12.tgz#961e3091f263e6345d2d84afab4e047a60b4b11b" + integrity sha512-zxrTNFl9Z8boMJXs6ieqZP0wAhvkdzmHSxTlJabM16cf5G9xBc1uPRH5Bbv2omEDDiM8MzTfqTJXBf0Ba4xFWA== "@types/node@^11.10.5": - version "11.15.44" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.44.tgz#5c3463a489ddd6d1d9f6717dff84e15097b0b362" - integrity sha512-fHAcNn2FlzDMA9rV5KP73r1cMZdbommWic2foHAEWoa/LITi91AueHDsJpnqjBEJ7bYoT2WC+KN1RL0vsM20zA== + version "11.15.54" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.54.tgz#59ed60e7b0d56905a654292e8d73275034eb6283" + integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== "@types/shelljs@^0.8.3": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.8.tgz#e439c69929b88a2c8123c1a55e09eb708315addf" - integrity sha512-lD3LWdg6j8r0VRBFahJVaxoW0SIcswxKaFUrmKl33RJVeeoNYQAz4uqCJ5Z6v4oIBOsC5GozX+I5SorIKiTcQA== + version "0.8.9" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.9.tgz#45dd8501aa9882976ca3610517dac3831c2fbbf4" + integrity sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw== dependencies: "@types/glob" "*" "@types/node" "*" -abbrev@1, abbrev@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agentkeepalive@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" - integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== - dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -282,46 +93,6 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.1.0, ansi-styles@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= - -ansistyles@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -329,72 +100,16 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== big-integer@^1.6.17: version "1.6.48" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== -bin-links@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.2.1.tgz#347d9dbb48f7d60e6c11fe68b77a424bee14d61b" - integrity sha512-wFzVTqavpgCCYAh8SVBdnZdiQMxTkGR+T3b14CNpBXIBe2neJWaMGAZ55XWWHELJJ89dscuq0VCBqcVaIOgCMg== - dependencies: - cmd-shim "^4.0.1" - mkdirp "^1.0.3" - npm-normalize-package-bin "^1.0.0" - read-cmd-shim "^2.0.0" - rimraf "^3.0.0" - write-file-atomic "^3.0.3" - -binary-extensions@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - binary@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" @@ -436,44 +151,6 @@ builtin-modules@^1.1.1: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= - -byte-size@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.0.tgz#36528cd1ca87d39bd9abd51f5715dc93b6ceb032" - integrity sha512-NNiBxKgxybMBtWdmvx7ZITJi4ZG+CYUgwOSZTfqB1qogkRHrhbQE/R2r5Fh94X+InN5MCYz6SvB/ejHMj/HbsQ== - -cacache@^15.0.3, cacache@^15.0.5: - version "15.0.5" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" - integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.0" - tar "^6.0.2" - unique-filename "^1.1.1" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" @@ -501,14 +178,6 @@ chalk@^2.0.0, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - charm@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.1.tgz#68566a7a553d4fe91797030dd1852d0dd6efa82d" @@ -516,31 +185,6 @@ charm@1.0.1: dependencies: inherits "^2.0.1" -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -cidr-regex@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" - integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== - dependencies: - ip-regex "^4.1.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= - dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -553,33 +197,6 @@ cli-spinners@0.2.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.2.0.tgz#85078737913b880f6ec9ffe7b65e83ec7776284f" integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= -cli-table3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" - integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== - dependencies: - object-assign "^4.1.0" - string-width "^4.2.0" - optionalDependencies: - colors "^1.1.2" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -cmd-shim@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-4.1.0.tgz#b3a904a6743e9fede4148c6f3800bf2a08135bdd" - integrity sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -587,132 +204,36 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - colors@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -columnify@~1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^2.12.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -debug@4, debug@^4.1.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= - dependencies: - asap "^2.0.0" - wrappy "1" - diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -720,41 +241,6 @@ duplexer2@~0.1.4: dependencies: readable-stream "^2.0.2" -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -784,45 +270,6 @@ exit-hook@^1.0.0: resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -832,13 +279,6 @@ fs-extra@3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -859,31 +299,10 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -892,24 +311,11 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.3, graceful-fs@^4.2.5: +graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -922,16 +328,6 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -939,80 +335,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hosted-git-info@^3.0.6, hosted-git-info@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.8.tgz#6e35d4cc87af2c5f816e4cb9ce350ba87a3f370d" - integrity sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw== - dependencies: - lru-cache "^6.0.0" - -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= - dependencies: - ms "^2.0.0" - -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ignore-walk@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1026,96 +348,23 @@ inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -init-package-json@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.2.tgz#d81a7e6775af9b618f20bba288e440b8d1ce05f3" - integrity sha512-PO64kVeArePvhX7Ff0jVWkpnE1DfGRvaWcStYrPugcJz9twQGYibagKJuIMHCX7ENcp0M6LJlcjLBuLD5KeJMg== - dependencies: - glob "^7.1.1" - npm-package-arg "^8.1.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "^3.0.0" - semver "^7.3.2" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^3.0.0" - interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-cidr@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" - integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== - dependencies: - cidr-regex "^3.1.1" - -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== +is-core-module@^2.2.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== dependencies: has "^1.0.3" -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -1129,36 +378,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-nice@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.1.tgz#1377579345c9ac3b0d940c1928af348ff7b42f8b" - integrity sha512-aHOgcSoOLvmFZQMvZ27rFw68r4e9OlQtH7YEcF2u5amVYbF/D3cKBXKCvl5EGhQz2NwJZ6RPfgRX6yNQ+UBKJw== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - jsonfile@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" @@ -1166,127 +385,6 @@ jsonfile@^3.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -just-diff-apply@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-3.0.0.tgz#a77348d24f0694e378b57293dceb65bdf5a91c4f" - integrity sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w== - -just-diff@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-3.0.2.tgz#65f4914e4d7500b364d12b7b3f03bcbacdac743b" - integrity sha512-+EiNvacECnZbszZa5IMjzrJ3dy2HKMXyGaNYWBnXy+iWW+437jIvQUrWaM9M+XI/6gOH8EjqvhGUOSh7ETekyg== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -libnpmaccess@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.1.tgz#17e842e03bef759854adf6eb6c2ede32e782639f" - integrity sha512-ZiAgvfUbvmkHoMTzdwmNWCrQRsDkOC+aM5BDfO0C9aOSwF3R1LdFDBD+Rer1KWtsoQYO35nXgmMR7OUHpDRxyA== - dependencies: - aproba "^2.0.0" - minipass "^3.1.1" - npm-package-arg "^8.0.0" - npm-registry-fetch "^9.0.0" - -libnpmdiff@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.3.tgz#4bfdf3313831d85ead1fb7a0bd2f43cc3408f1f6" - integrity sha512-BgVvJCjd+EGY3Ifb3+gWkZwMjn6kYMtruT88XXOrJCWyjnG5aRdFv3lKuJx5JdU5ku08G5LlY8tOZdfRn72m7w== - dependencies: - "@npmcli/disparity-colors" "^1.0.1" - binary-extensions "^2.2.0" - diff "^5.0.0" - minimatch "^3.0.4" - pacote "^11.2.3" - tar "^6.1.0" - -libnpmfund@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.0.2.tgz#d9552d4b76dd7f0a1a61b7af6b8f27184e51b0f5" - integrity sha512-Scw2JiLxfT7wqW/VbxIXV8u3FaFT/ZlR8YLFgTdCPsL1Hhli0554ZXyP8JTu1sLeDpHsoqtgLb4mgYVQnqigjA== - dependencies: - "@npmcli/arborist" "^2.0.0" - -libnpmhook@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.1.tgz#ef467078b71f6f86199f90e6c86e391588867f09" - integrity sha512-rwiWIWAQ6R5sPFRi9gsSC/+1/BxFlxk5nNQysVTXEHbqM9ds8g/duW79wRbZKnRyK1xyOmafxbj69nt9tcUkyw== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^9.0.0" - -libnpmorg@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.1.tgz#b279b6e0641013ba5dde465476e72624ea8dd2f3" - integrity sha512-Wj0aApN6TfZWHqtJNjkY7IeQpX24jrQD58IHrEz234quKVRYlegUiMsZl2g4OEFeZNSSc9QN28EdI1SBkUlW7g== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^9.0.0" - -libnpmpack@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.0.tgz#6b7f050f8dde248776c92495147f623dc711a221" - integrity sha512-w4wB8ZQUceUANUEiSYqi4nHlqFxhzLXWmhVbDt3NlyZVkmblTokR4xK9VfihLXJhdARQxeILx/HxReeqas1KZQ== - dependencies: - "@npmcli/run-script" "^1.3.0" - npm-package-arg "^8.0.0" - pacote "^11.1.4" - -libnpmpublish@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.0.tgz#ad6413914e0dfd78df868ce14ba3d3a4cc8b385b" - integrity sha512-2RwYXRfZAB1x/9udKpZmqEzSqNd7ouBRU52jyG14/xG8EF+O9A62d7/XVR3iABEQHf1iYhkm0Oq9iXjrL3tsXA== - dependencies: - normalize-package-data "^3.0.0" - npm-package-arg "^8.1.0" - npm-registry-fetch "^9.0.0" - semver "^7.1.3" - ssri "^8.0.0" - -libnpmsearch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.0.tgz#425cc7cd1feeaad7bf109f91f17b697a3a058f9e" - integrity sha512-UQyzQjtAv99kZDuijqTB2Do63qtt+2SKNOVSTnehWTQbxzXF7Jvc8UD3YNPljm8+Y5T31K2AqptbY5BD6XHlIg== - dependencies: - npm-registry-fetch "^9.0.0" - -libnpmteam@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.2.tgz#8450a77092faa801aaaea2a209a66e2137460c06" - integrity sha512-QGvtbMPdQzK+XybBPK0UjfLEI9fiDPQSFMbZW+2lmm0BgPoqxHle0Wl90bsIyBVY7pYzp45MgMqQNo7KWCLpDA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^9.0.0" - -libnpmversion@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.0.8.tgz#76c1873a3a85aa4f32bcab15317c465ccd016b6f" - integrity sha512-WrLLHx+y+0or9IycspDOWVCMde/NGo1AU97CHidjB7DeOjtbfjCOGwqem8z+WsgCnLHjwcvMaP63l7cJG2i9pg== - dependencies: - "@npmcli/git" "^2.0.4" - "@npmcli/run-script" "^1.8.2" - read-package-json-fast "^2.0.1" - semver "^7.3.4" - stringify-package "^1.0.1" - listenercount@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" @@ -1297,46 +395,6 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-fetch-happen@^8.0.13, make-fetch-happen@^8.0.9: - version "8.0.13" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.13.tgz#3692e1fdf027343c782e53bfe1f941fe85db9462" - integrity sha512-rQ5NijwwdU8tIaBrpTtSVrNCcAJfyDRcKBC76vOQlyJX588/88+TE+UpjWl4BgG7gCkp29wER7xcRqkeg+x64Q== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.0.5" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - promise-retry "^1.1.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" - -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== - dependencies: - mime-db "1.45.0" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1349,77 +407,6 @@ minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.3.3.tgz#34c7cea038c817a8658461bf35174551dce17a0a" - integrity sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== - dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - "mkdirp@>=0.5 0", mkdirp@^0.5.3: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -1427,42 +414,6 @@ mkdirp-infer-owner@^2.0.0: dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0, ms@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -node-gyp@^7.1.0, node-gyp@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.3" - nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" - rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" - which "^2.0.2" - node-status@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status/-/node-status-1.0.0.tgz#7906a7c47a6587d03496bf74ec634abaa03f8e80" @@ -1473,202 +424,6 @@ node-status@^1.0.0: cli-spinners "0.2.0" colors "1.1.2" -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -normalize-package-data@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.0.tgz#1f8a7c423b3d2e85eb36985eaf81de381d01301a" - integrity sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw== - dependencies: - hosted-git-info "^3.0.6" - resolve "^1.17.0" - semver "^7.3.2" - validate-npm-package-license "^3.0.1" - -npm-audit-report@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.4.tgz#b14c4625131fb7bcacc4b1c83842af1f58c92c98" - integrity sha512-Tz7rnfskSdZ0msTzt2mENC/B+H2QI8u0jN0ck7o3zDsQYIQrek/l3MjEc+CARer+64LsVTU6ZIqNuh0X55QPhw== - dependencies: - chalk "^4.0.0" - -npm-bundled@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-install-checks@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" - integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.0.tgz#b5f6319418c3246a1c38e1a8fbaa06231bc5308f" - integrity sha512-/ep6QDxBkm9HvOhOg0heitSd7JHA1U7y1qhhlRlteYYAi9Pdb/ZV7FW5aHpkrpM8+P+4p/jjR8zCyKPBMBjSig== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.4.tgz#40e96b2b43787d0546a574542d01e066640d09da" - integrity sha512-Qzg2pvXC9U4I4fLnUrBmcIT4x0woLtUgxUi9eC+Zrcv1Xx5eamytGAfbDWQ67j7xOcQ2VW1I3su9smVTIdu7Hw== - dependencies: - glob "^7.1.6" - ignore-walk "^3.0.3" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.0.tgz#2befed87b0fce956790f62d32afb56d7539c022a" - integrity sha512-ygs4k6f54ZxJXrzT0x34NybRlLeZ4+6nECAIbr2i0foTnijtS1TJiyzpqtuUAJOps/hO0tNDr8fRV5g+BtRlTw== - dependencies: - npm-install-checks "^4.0.0" - npm-package-arg "^8.0.0" - semver "^7.0.0" - -npm-profile@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.2.tgz#4cff0710ac8d71280202b6c261b160cc0cace16a" - integrity sha512-hOhpH23PeWUFParJ6T1nquiHJLmFZ5VReTjBf1TJpl1YGuqfUS+ZYujVYPfuMbixosO82kWzvnxg4ZmP4VkTeg== - dependencies: - npm-registry-fetch "^9.0.0" - -npm-registry-fetch@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz#86f3feb4ce00313bc0b8f1f8f69daae6face1661" - integrity sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA== - dependencies: - "@npmcli/ci-detect" "^1.0.0" - lru-cache "^6.0.0" - make-fetch-happen "^8.0.9" - minipass "^3.1.3" - minipass-fetch "^1.3.0" - minipass-json-stream "^1.0.1" - minizlib "^2.0.0" - npm-package-arg "^8.0.0" - -npm-user-validate@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" - integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== - -npm@^7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/npm/-/npm-7.5.3.tgz#85959d5c3dc02cfb56ab479d801a1d6a0c55c4bc" - integrity sha512-4MhBvHrQ82v5cvoWe7tX+IK8Z2xsbde9IS9sCP3SKpRo4JOHxe14tpZ/ZOTCy8xkp0DhBYqjxECmWv2EZK8BXg== - dependencies: - "@npmcli/arborist" "^2.2.1" - "@npmcli/ci-detect" "^1.2.0" - "@npmcli/config" "^1.2.9" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/run-script" "^1.8.2" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - archy "~1.0.0" - byte-size "^7.0.0" - cacache "^15.0.5" - chalk "^4.1.0" - chownr "^2.0.0" - cli-columns "^3.1.2" - cli-table3 "^0.6.0" - columnify "~1.5.4" - glob "^7.1.4" - graceful-fs "^4.2.5" - hosted-git-info "^3.0.8" - ini "^2.0.0" - init-package-json "^2.0.2" - is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - leven "^3.1.0" - libnpmaccess "^4.0.1" - libnpmdiff "^2.0.3" - libnpmfund "^1.0.2" - libnpmhook "^6.0.1" - libnpmorg "^2.0.1" - libnpmpack "^2.0.0" - libnpmpublish "^4.0.0" - libnpmsearch "^3.1.0" - libnpmteam "^2.0.2" - libnpmversion "^1.0.8" - make-fetch-happen "^8.0.13" - minipass "^3.1.3" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - ms "^2.1.2" - node-gyp "^7.1.2" - nopt "^5.0.0" - npm-audit-report "^2.1.4" - npm-package-arg "^8.1.0" - npm-pick-manifest "^6.1.0" - npm-profile "^5.0.2" - npm-registry-fetch "^9.0.0" - npm-user-validate "^1.0.1" - npmlog "~4.1.2" - opener "^1.5.2" - pacote "^11.2.6" - parse-conflict-json "^1.1.1" - qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^3.0.0" - read-package-json-fast "^2.0.1" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.4" - ssri "^8.0.1" - tar "^6.1.0" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^1.0.4" - uuid "^8.3.1" - validate-npm-package-name "~3.0.0" - which "^2.0.2" - write-file-atomic "^3.0.3" - -npmlog@^4.1.2, npmlog@~4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1681,66 +436,15 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -pacote@^11.1.11, pacote@^11.1.4, pacote@^11.2.3, pacote@^11.2.6: - version "11.2.6" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.2.6.tgz#c0426e5d5c8d33aeea3461a75e1390f1ba78f953" - integrity sha512-xCl++Hb3aBC7LaWMimbO4xUqZVsEbKDVc6KKDIIyAeBYrmMwY1yJC2nES/lsGd8sdQLUosgBxQyuVNncZ2Ru0w== - dependencies: - "@npmcli/git" "^2.0.1" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^1.8.2" - cacache "^15.0.5" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^2.1.4" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^9.0.0" - promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" - -parse-conflict-json@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" - integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== - dependencies: - json-parse-even-better-errors "^2.3.0" - just-diff "^3.0.1" - just-diff-apply "^3.0.0" - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== process-nextick-args@~1.0.6: version "1.0.7" @@ -1752,100 +456,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" - integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= - dependencies: - err-code "^1.0.0" - retry "^0.10.0" - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= - dependencies: - read "1" - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -puka@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/puka/-/puka-1.0.1.tgz#a2df782b7eb4cf9564e4c93a5da422de0dfacc02" - integrity sha512-ssjRZxBd7BT3dte1RR3VoeT2cT/ODH8x+h0rUF1rMqB0srHYf48stSDWfiYakTp5UBZMxroZhB2+ExLDHm7W3g== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -read-cmd-shim@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" - integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== - -read-package-json-fast@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.1.tgz#c767f6c634873ffb6bb73788191b65559734f555" - integrity sha512-bp6z0tdgLy9KzdfENDIw/53HWAolOVoQTRWXv7PUiqAo3YvvoUVeLr7RWPWq+mu7KUOu9kiT4DvxhUgNUBsvug== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-3.0.0.tgz#2219328e77c9be34f035a4ce58d1fb8e2979adf9" - integrity sha512-4TnJZ5fnDs+/3deg1AuMExL4R1SFNRLQeOhV9c8oDKm3eoG6u8xU0r0mNNRJHi3K6B+jXmT7JOhwhAklWw9SSQ== - dependencies: - glob "^7.1.1" - json-parse-even-better-errors "^2.3.0" - normalize-package-data "^3.0.0" - npm-normalize-package-bin "^1.0.0" - -read@1, read@~1.0.1, read@~1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@^2.0.2, readable-stream@^2.0.6: +readable-stream@^2.0.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -1871,16 +482,6 @@ readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -1888,38 +489,12 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -resolve@^1.1.6, resolve@^1.17.0, resolve@^1.3.2: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== +resolve@^1.1.6, resolve@^1.3.2: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: - is-core-module "^2.1.0" + is-core-module "^2.2.0" path-parse "^1.0.6" restore-cursor@^1.0.1: @@ -1930,16 +505,6 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - rimraf@2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -1947,45 +512,23 @@ rimraf@2: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - semver@^5.3.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.3.2, semver@^7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" - integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== - dependencies: - lru-cache "^6.0.0" - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -2000,112 +543,11 @@ shelljs@^0.8.3: interpret "^1.0.0" rechoir "^0.6.2" -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -socks-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" - integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== - dependencies: - agent-base "6" - debug "4" - socks "^2.3.3" - -socks@^2.3.3: - version "2.5.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.5.1.tgz#7720640b6b5ec9a07d556419203baa3f0596df5f" - integrity sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ== - dependencies: - ip "^1.1.5" - smart-buffer "^4.1.0" - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -2118,32 +560,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-package@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" - integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: +strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -2156,53 +579,11 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -tar@^6.0.2, tar@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= -treeverse@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" - integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== - tslib@^1.13.0, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -2234,43 +615,10 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typescript@^3.3.3333: - version "3.9.9" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.9.tgz#e69905c54bc0681d0518bd4d587cc6f2d0b1a674" - integrity sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== universalify@^0.1.0: version "0.1.2" @@ -2292,93 +640,16 @@ unzipper@^0.8.11: readable-stream "~2.1.5" setimmediate "~1.0.4" -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= - dependencies: - builtins "^1.0.3" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== - -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - xmldom@^0.1.27: version "0.1.31" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" @@ -2388,8 +659,3 @@ xpath@0.0.27: version "0.0.27" resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 9e5b238feb68d3e54f485dc91dbc2486b223f5e8 Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Fri, 8 Oct 2021 11:24:15 -0700 Subject: [PATCH 033/336] work with shapes in PPT --- playlists-prod/powerpoint.yaml | 11 ++ playlists/powerpoint.yaml | 11 ++ samples/powerpoint/preview-apis/shapes.yaml | 188 ++++++++++++++++++++ view-prod/powerpoint.json | 1 + view/powerpoint.json | 1 + 5 files changed, 212 insertions(+) create mode 100644 samples/powerpoint/preview-apis/shapes.yaml diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index d9a8ee75b..c2d9c6858 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -53,6 +53,17 @@ group: Preview APIs api_set: PowerPointApi: '1.3' +- id: powerpoint-shapes + name: 'Insert shape, line, and text box' + fileName: shapes.yaml + description: >- + Inserts, resizes, moves, and deletes geometric shapes, lines, and text boxes + to a slide. + rawUrl: >- + 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 diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 6a48d8386..5c8d4c3f9 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -53,6 +53,17 @@ group: Preview APIs api_set: PowerPointApi: '1.3' +- id: powerpoint-shapes + name: 'Insert shape, line, and text box' + fileName: shapes.yaml + description: >- + Inserts, resizes, moves, and deletes geometric shapes, lines, and text boxes + to a slide. + rawUrl: >- + 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 diff --git a/samples/powerpoint/preview-apis/shapes.yaml b/samples/powerpoint/preview-apis/shapes.yaml new file mode 100644 index 000000000..429899e1a --- /dev/null +++ b/samples/powerpoint/preview-apis/shapes.yaml @@ -0,0 +1,188 @@ +id: powerpoint-shapes +name: 'Insert shape, line, and text box' +description: 'Inserts, resizes, moves, and deletes geometric shapes, lines, and text boxes to a slide.' +host: POWERPOINT +api_set: + PowerPointApi: '1.3' +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)); + + async function createHexagon() { + await PowerPoint.run(async (context) => { + var shapes = context.presentation.slides.getItemAt(0).shapes; + var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, { + left: 100, + top: 100, + height: 150, + width: 150 + }); + hexagon.name = "Hexagon"; + hexagon.load("id"); + + await context.sync(); + console.log(hexagon.id); + }); + } + + async function shrinkHexagon() { + await PowerPoint.run(async (context) => { + var shapes = context.presentation.slides.getItemAt(0).shapes; + var hexagon = shapes.getItemAt(0); + hexagon.height = 50; + hexagon.width = 50; + + await context.sync(); + }); + } + + async function moveHexagon() { + await PowerPoint.run(async (context) => { + var shapes = context.presentation.slides.getItemAt(0).shapes; + var hexagon = shapes.getItemAt(0); + hexagon.top = 50; + hexagon.left = 150; + + await context.sync(); + }); + } + + async function createLine() { + await PowerPoint.run(async (context) => { + var 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. + var line = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, height: 20, width: 150 }); + line.name = "StraightLine"; + + await context.sync(); + }); + } + + async function createTextBox() { + await PowerPoint.run(async (context) => { + var shapes = context.presentation.slides.getItemAt(0).shapes; + var textbox = shapes.addTextBox("Hello!", { left: 100, top: 300, height: 300, width: 450 }); + textbox.name = "Textbox"; + + return context.sync(); + }); + } + + async function createShapeWithText() { + await PowerPoint.run(async (context) => { + var shapes = context.presentation.slides.getItemAt(0).shapes; + var 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(); + }); + } + + async function removeAll() { + await PowerPoint.run(async (context) => { + const slide = context.presentation.slides.getItemAt(0); + const shapes = 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(); + }); + } + + /** 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, resize, move, and delete shapes.

+
+ +
+

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/powerpoint.json b/view-prod/powerpoint.json index 094736815..6ff15a8ea 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -5,6 +5,7 @@ "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" diff --git a/view/powerpoint.json b/view/powerpoint.json index cc82b0310..8ec9da8d2 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -5,6 +5,7 @@ "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" From 8293438b76ea2820793ca13f682da6214ae425cb Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Sun, 10 Oct 2021 16:19:46 -0700 Subject: [PATCH 034/336] update powerpoint.xlsx --- snippet-extractor-metadata/powerpoint.xlsx | Bin 12078 -> 12261 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 9126f84a17393092ff0d9026f2fedba27c160d40..e31be49637050ae8b9e57c1df5ea1f0cda2ea7df 100644 GIT binary patch delta 3657 zcmZ8kc{J1w_n#SK-^Mcbbu3}5$rMv03S%ik2E#-MBl|92OQa&|JIGGRzOQ9QCRBt- z_Cger?XgqwK2N{jd7pFM`^V?pbMCq4-gECg_j7Nx!#BrTOGbLW$q3eJ5YH$A5WKTg zd2i=69up68V%X#1ah6}5ZHv9iN2_mF+WW*HJKjEtC|w3-G~~a(pjduJjE`T_-pdZJ zS^w(in0gZ(fVRpZ`hB@By=?NW-r>al*ebu<9dpl+oGptH6pe9c?%nsr%V5rjEQ4YU z6J!}fi&HaQdEsT9aKDAWoJ+$7u*O~c)L~Kcxp^pN(M$4987@7{VaeKlbUy*{V~MLlX?}IR7PGwetFX4+6Sh+&G1L zf^AiUA{o&Y8_kj15wKAHIK#TiHiI=PD7onUHqU#Rucl19i)ta_7PB5eT`K1832Uui z5)~VFknJ&C>v=;=WNSyX8hkzW=1N!6-1i$Y#=gOdgs!Xw#v0NyTq15d(?vPyEsqGz zVzn!a{j)}cSsJkzTF4btQsUP>%0x^W9J9R@8We?%HdnT$p!=1`yR(ShP9Kwub8TaP zA&xu?xqdk+wL{~C+v$M|5?G*Y4839a>#o+YT4)H);LgBO#7dvk0v2ktIMBD1&QaLK znO1me$8dv9ZTNb&{B*|L#fmsHAIPf#lbM6aT7=5ljU(KAPk5*Z_E>|h*$w?>dKoJp zwCZWO!o9lgl2bv5`JJMg$l;ydHXWkke>LhYSKMI!{PZ=+F?v8%Ryu!o^rlCK%)Yy} zGpUd75f9v%1sWwO<3D!=v*{);*dS*berZjde0T)?cqlk>d%)Xc;?%2-Z|lKcPiT)G zR`K6X<*Dcu<#46+NxTbM-s0j~w}Cl%w>P8$*6|*=kv6$tmdk@epHv8q5gTwkooDbF zjo<7b4aM7_%AyWqd7;uN=naQJb~r&VHgN!)x;3YYh+n@p8JrN2=bs=Eustl>{+}#PqnloKm|CNlLm}jOt36^{R#+6#`-vhU|bm-(AclQ z6x>1%zS6v>W%9ICoTXRz1J|WxzIa9B0ixuD*?DKJgqTdBk2UD&Wp&e9JD-^H)#{xL zUM18hWnp0{zl(>oUF%--^oP)vc9)>bwC)#hHY>NYb*I8GMqQ>!(KPC7?QlfSk*Y{M znP50}FmvZ#!xfr(3*-KMoVKhyutu=yK`Z{2s05-X{K|$N@@s|)>UUlj>gPW?WwiEd z<(ArB$*}vvd)L@j9fERN!}NwqMk4FO6QqVsUb1G!>q3|86rYnp{7Wb9QX|#(*a$kh z?0pc1d-vSd7j1j1G$J~RnI0*5bzrrdLV5>YzuiTXT{!}ipsLQjY(TsLaOz!;t&mjQ z=U`EyPnqQ==P9#TR+n!4!tra-qSyf*lHBhp7viFv4rK|z>MYj#{oX94z;G`r`cFSU zhDBV()9@+VwJE!@5AV;zPIdBi^u<)V(M(1SX*DNWS6wKtwg*RI_@DI}ec%jpCkc8E zx&|u1rri6suDNmNofm}x=sCohwaZLrdxUd_K4{K|_?Z<-n1ZF?hS~Va*L(9l4Z&@$ zjRDtv&))6EQED^;ihnXfAjij$e}J53cPmyEaj_+a62(myir^}etwrcRI!v{O7O$>( zf_(GXbc^GBX@An0jJxuOW7Wdtt~YzP{oC-1;ho2cz}x88A9K3qPr!c>kg*&h4HE%6-!)-qz=wAzrai*Off7Wuw*Yw6!$6 zbwcvJ_ZRcf`tg`J>7dz7#R!W9tI z6xi82Hu&)t9C0OA2BolZzUu9TMpTRAlao317E=@H3P(Y-ljqKQa>a zKv~MiL1&rS31Wpt???XZ&l&aMYMW{(9=AFJ`0yspk$z zG_PsXiZ1B3}2MA0`yBVMww=-y|WY=J@`5pWPEEDTs;y{A+W)2!P% zi0nyPK^B9qogoW}{}y|f?iH-wC2NWyd|zSx)8uhGnM^|4*6s`FR4;vMNzu z5pET?#G>cR`Y}vKtdMh#Utm{4DNzkuq6e8QO)BKe<)8Z5gc0<(vb-Ad&dx4h@905Ya=rOEvJV|yIFNVMMr0z-yy3h z?*oX~v4^g)8*Jg<6yvI2Y(4`s1#k+1x|)GADW*9+b-VSUQ!6Cb$EHDLM*iWdMX}Ki zSa+8vvIMzk!eGdE}e;zb6lC zffZtk0CyRu^JQbqKBSP6^I&sX)Bfs@;{xwg1!U8-8Lv^a=#x-(;irUmcq0V$_UF`Okk@l`z z^|fj^R|m{9wTK ziz}&#b4~Fv{vz=>cgui!lbX|OOGWt3}mW`Xt zYLmjIYk{Pf6|AOz^+1%8erp%S)Yhk-bMX^*pL#7TEln!zgrH(qa}2!jfO$l<%}*cS5((0;%?@W$#Ys4Py1iaE@=_Y z(+b2FRv10?kC;yUKuC<(F3}d5%6iA4-M`oOd_Ujzw!o&3as2P{ra;Lw|H*+Y%$Rm> zaB-+Gbp&L&=GMxv@X~=(Y2@?;%rWfGIaMzy1*MM`;S4cpm_*4!0fKR-DsTKc{jpxp z?W|{8&hgE3sRT_#w%m00S5gH=Tsq_P5!JnIgd;xXK{mxZm$H}=(F_J|(~Vl$A`_(L z@1OToQfN{h{NX2d+5GF-t1%n=-3Ov#(w>mD{9^RO=qvKG0L z!D{w-cZ;=E#s94Gt6V#x!<2)-ebu2%&6iA_j#d(Dd%8N8{AEMN3^<`&aW@**=SwN3 zVq)q3mag*8lbG){RJdRYCX}eTk&Sq>wHBkFbfF>pj!u`H9>e`~G6pqVfqh*na76^MdNqB3BFk^;01EK$-D`R^8^ z|6ea7aj;g559Co+fZ3zK4oP9qRvGbs;{bXqBVm9P7_WQ|29pK5mCr&uK$waw!wmYL G!2bbc9_QHX-F}rK0xmZx&#HLi!UJc^#!yMr>)tauz>_nGSWBx4cjme}M*QKz!Z*dP z_05qvsqz*_)ctXZdNd&}47mw8Z+qK#a|o3wOI3Bh57p>EW2w^>B2Nal`d_oL1*#OH zjGPyQUKH-8Oc~|Gq{?8-@L)4TdhJ$UBRGec(QtY-{M~>Y)_DYqRnc70kmz?F@JWqn zuQV%UekaCJKZ(Es;6MpK7kvoxl0n01=d!}klAprr_L!3(S&vooI}_8dh}s9!<2dIN zC_x1TX+Y52rl1M+O9HG@0syA;1Xns9yeY~3t1MG6qV`hd*Fvh`ANFXgqwCTtY-nk> z!;Dm?tZ0D>0k@lP*Sq{Qzoe*3n%Rf;w~c1>$=_CUl0H345n9)Yuv3bwC2v{ZZ%E%p z`$qpFO>{{yeTw1sXH_jdkUMOAelYaCLG$^4em?Z3^dNqo7%fAgDX&Ums#VeI^ zpnpFuy5CbQhm&F>{)jis#HrRGcTv4kk0o@}p$whmhV*LxpodN+G}lyF3V1{O?ONOG zioKw1#OQB^i!uJ0lmn@PIvt#-_)oYK+)xWI=?b>%i1Jz?8xRjXJM?&;ewy$Sb)8oH z*y?HM7r2f42xG^`8(zbcljPVzJP$4`H$xnw&U$99c~QGUBT|2XNJ)4ol_M^xTxS`M z*9owm-L9I>QD=%*e7+MfWhQ$4`M9_Ijz-*AKm#oDa{1Wx-K$=6)@xXv<%qir;j>vE zbS}^O*3}ntZm2iuOXt@W)J7&IyMGY-_JQ;0YI8t$Iw8JbrW6+IDiQk)kN?-U~{3wPyj`tudkk+w~`P?|2J_-fO~A7kNc~ zooZ#w|NY#G%*Y$=mrC_=kmZHx2kX;xpi}lT&f>cFPROWLvXWuCjDg)9ma{O7VpwT7 zMPJ`o9!37`!z3)dCE$7mU;fzm-r}gD+S9L*I;Wh zKBoGVPZZu-axFK6^=hL(+;jZU+Gg2}De})NQ&^3rrDh=Bd&$_c-|}t5M@nN zynWUU%jmvxi+Er1?gsFE)D@y19E*u;rD51U-6c3)+$GdOSsOsiT{JXFtLx zp@gApN5;Z)$R!!e@T=)?eLnxO;|ynY$xvDRB%s#syZ4$|^XuK>f5d z!k+Q*;!p*z1?yw693c^iX~g$u-17irPuV+2!3j`L$&pcQ{JL9ww@bqV_oW$|yT*r+|eZAl=oehv1m_DM4D&a@e2>wjalwAw=sqVDRf)i}Fu;(ES zrneiaHMGZav!?437+x%Xap^DLyT@@B7G>z*wYJ?m{LyNXz(KD{`2206b>Fe8|Fo|_ zMi!s8vmv99%MeVG-0l8s`A6OaG-c!px%!0hA2`==l>xyr1Q*jq3IL#hfZ-9vr<5_; zZaotc>{e;IRZmh&d>muN{8BTthy|*85hz?!iR+Muv})=9Iogig!(A@RF-$l(3d4f*FQO0tX1ED3NO)gB+D1tM}m91)-As#Len8)I!}etScH zj_aVJ5P`ND%YBu>F$;FZ>yHumVxA~D)mw=g`O-Lbbi&ppkR#&!n?%oaJmJ@OGy0Ld zaWpR{Y3ipsRI$?hd11l}*>lD-M{;Ol#hby5jxJhE-Ir}+IN7P+%yrd4CUH&C=!Aei z4r9fZi;pT`=BBJe&diDN#PDlFV19{8Gz0vBr08aLQvJvXgpI6HG=OK%44ib%Eb`<1 zPRyeAI{8}Sx*9@%%W8@>x_!sSGjBBQ-C_`!0faxrgg55*C!ShjK6I~H!P=cBmx>dr z^$`>-{7m~eOIY(TlF8#|PTj=>Edn7oT%nh`Oy8s(;vJ;! zYE1I$jT0EkF-xDw!SD8DsY~iUq1xfM-s40)iR>%0oXmXw+eM}K*a!E=Cb>fs@q~Bq zJ<*#kOC(=HjVj7M^+x)XeM|!k30oeZlf8;mWDd6+%oyi)2d{C=Mqu7EiKW0&gDm>! z3Xj1u66LhH9xTL}*Jf9_i?(&yE}h08_!Kqitn!+1Y9D_ zK7!-5Rx(Jx8B3~#ckaj+Vcr#z2XDWLi|5wsx-6^o?@O(&Xw-u0sNKJ3f_dObSxIM_ z^tr7-c!XtimqfSSmh-#gEbC4X-9{jZ?Sk3%cS#L@K5IEszwzfQgPDCI8XP*eQ39-d zEm{*}ux}e%+WUqGg!cZElyz8Mr9oR0xBIm=@6xh&2Gj&J-AtU>((I%P^{GNkOzRd}xAM)Ev@`9d#%J+_P zg=b6bB1x~Z2L$+!K5TYt1|HlijnA&fYHT?u3~)72Z4dMW*REn*GliUmEa~#{mJX*r zYa^Y}6~3mhN6BElt&2U{7Pyp>_*n)NQ!U#e0SPH&ZE#;r>k?L-=jjO1D87k9YA^zs zkL()rzP@hP<>sEzHWHA`hzJkYYSR;v&Y0LZD;)Fo>e8JBk~tGt z1^!%M@Xz;TgENYM@WCWxM*ZL4#9b5xSt5 From bee4a018013d478606ff57e9f1bd1b78cc94788e Mon Sep 17 00:00:00 2001 From: Ricky Kirkham Date: Tue, 12 Oct 2021 11:52:27 -0700 Subject: [PATCH 035/336] review changes --- playlists-prod/powerpoint.yaml | 7 +-- playlists/powerpoint.yaml | 7 +-- samples/powerpoint/preview-apis/shapes.yaml | 67 +++++++++++++++------ snippet-extractor-output/snippets.yaml | 57 ++++++++++++++++++ 4 files changed, 109 insertions(+), 29 deletions(-) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index c2d9c6858..a00a6ac58 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -56,14 +56,11 @@ - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml - description: >- - Inserts, resizes, moves, and deletes 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/preview-apis/shapes.yaml group: Preview APIs - api_set: - PowerPointApi: '1.3' + api_set: PowerPointApi '1.3' - id: powerpoint-tags name: Work with tags fileName: tags.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 5c8d4c3f9..ef975ac32 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -56,14 +56,11 @@ - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml - description: >- - Inserts, resizes, moves, and deletes 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/preview-apis/shapes.yaml group: Preview APIs - api_set: - PowerPointApi: '1.3' + api_set: PowerPointApi '1.3' - id: powerpoint-tags name: Work with tags fileName: tags.yaml diff --git a/samples/powerpoint/preview-apis/shapes.yaml b/samples/powerpoint/preview-apis/shapes.yaml index 429899e1a..d3e930089 100644 --- a/samples/powerpoint/preview-apis/shapes.yaml +++ b/samples/powerpoint/preview-apis/shapes.yaml @@ -1,9 +1,8 @@ id: powerpoint-shapes name: 'Insert shape, line, and text box' -description: 'Inserts, resizes, moves, and deletes geometric shapes, lines, and text boxes to a slide.' +description: 'Inserts geometric shapes, lines, and text boxes to a slide.' host: POWERPOINT -api_set: - PowerPointApi: '1.3' +api_set: PowerPointApi '1.3' script: content: | $("#create-hexagon").click(() => tryCatch(createHexagon)); @@ -14,23 +13,27 @@ script: $("#create-shape-with-text").click(() => tryCatch(createShapeWithText)); $("#remove-all").click(() => tryCatch(removeAll)); + // 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. async function createHexagon() { await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; - var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, { - left: 100, - top: 100, - height: 150, - width: 150 - }); + var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, + { + left: 100, + top: 100, + height: 150, + width: 150 + }); hexagon.name = "Hexagon"; - hexagon.load("id"); - + await context.sync(); - console.log(hexagon.id); }); } + // This function gets the collection of shapes on the first slide, + // gets the first shape in the collection, and resets its size. async function shrinkHexagon() { await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; @@ -42,6 +45,8 @@ script: }); } + // This function gets the collection of shapes on the first slide, + // gets the first shape in the collection, and resets its location. async function moveHexagon() { await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; @@ -53,38 +58,60 @@ script: }); } + // 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. async function createLine() { await PowerPoint.run(async (context) => { var 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. - var line = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, height: 20, width: 150 }); + var line = shapes.addLine(PowerPoint.ConnectorType.straight, + { + left: 400, + top: 200, + height: 20, + width: 150 + }); line.name = "StraightLine"; await context.sync(); }); } + // This function gets the collection of shapes on the first slide, + // and adds a text box to the collection, while specifying its text, + // location, and size. Then it names the text box. async function createTextBox() { await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; - var textbox = shapes.addTextBox("Hello!", { left: 100, top: 300, height: 300, width: 450 }); + var textbox = shapes.addTextBox("Hello!", + { + left: 100, + top: 300, + height: 300, + width: 450 + }); textbox.name = "Textbox"; return context.sync(); }); } + // 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. async function createShapeWithText() { await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { - left: 100, - top: 400, - height: 50, - width: 150 - }); + left: 100, + top: 400, + height: 50, + width: 150 + }); braces.name = "Braces"; braces.textFrame.textRange.text = "Shape text"; braces.textFrame.textRange.font.color = "purple"; @@ -94,6 +121,8 @@ script: }); } + // This function gets the collection of shapes on the first slide, + // and then iterates through them, deleting each one. async function removeAll() { await PowerPoint.run(async (context) => { const slide = context.presentation.slides.getItemAt(0); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fe6331e8e..29bcd1736 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9942,6 +9942,63 @@ console.log(JSON.stringify(presentationTags)); }); +'PowerPoint.ShapeCollection#addGeometricShape:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml + + await PowerPoint.run(async (context) => { + var shapes = context.presentation.slides.getItemAt(0).shapes; + var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, + { + left: 100, + top: 100, + height: 150, + width: 150 + }); + hexagon.name = "Hexagon"; + + await context.sync(); + }); +'PowerPoint.ShapeCollection#addLine:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml + + await PowerPoint.run(async (context) => { + var 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. + var line = shapes.addLine(PowerPoint.ConnectorType.straight, + { + left: 400, + top: 200, + height: 20, + width: 150 + }); + line.name = "StraightLine"; + + await context.sync(); + }); +'PowerPoint.ShapeCollection#addTextBox:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml + + await PowerPoint.run(async (context) => { + var shapes = context.presentation.slides.getItemAt(0).shapes; + var textbox = shapes.addTextBox("Hello!", + { + left: 100, + top: 300, + height: 300, + width: 450 + }); + textbox.name = "Textbox"; + + return context.sync(); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: From 6554390d7f13d1c350730f3268b340b8e1053a16 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 14 Oct 2021 17:25:55 -0700 Subject: [PATCH 036/336] [Excel] (ExcelApi 1.14) Add getPrecedents API to existing sample (#564) * Rename direct-precedents.yaml to precedents.yaml, update snippet with ExcelApi 1.14 getPrecedents API * Update excel.xlsx with new precedents info * Run yarn start * Update samples/excel/42-range/precedents.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 10 +-- playlists/excel.yaml | 10 +-- ...direct-precedents.yaml => precedents.yaml} | 74 ++++++++++++------ snippet-extractor-metadata/excel.xlsx | Bin 24623 -> 24547 bytes snippet-extractor-output/snippets.yaml | 33 +++++++- view-prod/excel.json | 2 +- view/excel.json | 2 +- 7 files changed, 92 insertions(+), 39 deletions(-) rename samples/excel/42-range/{direct-precedents.yaml => precedents.yaml} (69%) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 07e4f61aa..9d25f04fd 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -644,17 +644,17 @@ group: Range api_set: ExcelApi: '1.1' -- id: excel-direct-precedents - name: Direct precedents - fileName: direct-precedents.yaml +- id: excel-precedents + name: Precedents + fileName: precedents.yaml description: >- This sample shows how to find and highlight the precedents of the currently selected cell. Precedents are cells referenced by the formula in a cell. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml group: Range api_set: - ExcelAPI: '1.12' + ExcelApi: '1.14' - id: excel-range-style name: Style fileName: style.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index cbda5fd40..a7c143dc6 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -644,17 +644,17 @@ group: Range api_set: ExcelApi: '1.1' -- id: excel-direct-precedents - name: Direct precedents - fileName: direct-precedents.yaml +- id: excel-precedents + name: Precedents + fileName: precedents.yaml description: >- This sample shows how to find and highlight the precedents of the currently selected cell. Precedents are cells referenced by the formula in a cell. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/direct-precedents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/precedents.yaml group: Range api_set: - ExcelAPI: '1.12' + ExcelApi: '1.14' - id: excel-range-style name: Style fileName: style.yaml diff --git a/samples/excel/42-range/direct-precedents.yaml b/samples/excel/42-range/precedents.yaml similarity index 69% rename from samples/excel/42-range/direct-precedents.yaml rename to samples/excel/42-range/precedents.yaml index 81424ac14..127ae8caf 100644 --- a/samples/excel/42-range/direct-precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -1,19 +1,20 @@ order: 13 -id: excel-direct-precedents -name: Direct precedents +id: excel-precedents +name: Precedents description: This sample shows how to find and highlight the precedents of the currently selected cell. Precedents are cells referenced by the formula in a cell. host: EXCEL api_set: - ExcelAPI: '1.12' + 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)); - /** Select a cell with direct precedents on one worksheet. */ + /** Select a cell with precedents on one worksheet. */ async function selectFirstCell() { await Excel.run(async (context) => { // Ensure correct worksheet is active. @@ -27,7 +28,7 @@ script: }); } - /** Select a cell with direct precedents on both worksheets. */ + /** Select a cell with precedents on both worksheets. */ async function selectSecondCell() { await Excel.run(async (context) => { // Ensure correct worksheet is active. @@ -44,6 +45,7 @@ script: async function getDirectPrecedents() { 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"); @@ -52,7 +54,7 @@ script: console.log(`Direct precedent cells of ${range.address}:`); - // Use the direct precedents API to loop through precedents of the active cell. + // Use the direct precedents API to loop through precedents of the active cell. for (var 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"; @@ -62,6 +64,27 @@ script: }); } + async function getAllPrecedents() { + 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 (var 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(); + }); + } + /** Remove highlighting from precedent cells. */ async function clearFormatting() { await Excel.run(async (context) => { @@ -123,32 +146,37 @@ script: 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 find and highlight the precedents of the currently selected cell. Precedents are cells referenced by the formula in a cell.

+

This sample shows how to find and highlight the precedents of the currently selected cell.

+

Precedents are cells referenced by the formula in a cell. A formula can also reference a cell that contains a formula, which results in a series of precedents. A "direct precedent" is a cell directly referenced by the selected formula. This sample shows how to return both the direct precedents and all of the precedents.

-

Set up

+

Set up

+

Try it out

- - - - -
+ + + + + + language: html style: content: | diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 5a1059f54fd02f21f4a6a6492cb5b29d19000989..1de0bd8f6ec00c30e16cad1c33fef63ce4dd8717 100644 GIT binary patch delta 13993 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 29bcd1736..53a793178 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3148,10 +3148,11 @@ 'Excel.Range#getDirectPrecedents:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml + 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"); @@ -3160,7 +3161,7 @@ console.log(`Direct precedent cells of ${range.address}:`); - // Use the direct precedents API to loop through precedents of the active cell. + // Use the direct precedents API to loop through precedents of the active cell. for (var 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"; @@ -3168,6 +3169,29 @@ } 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 (var 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#getDirectDependents:member(1)': - >- // Link to full sample: @@ -4953,10 +4977,11 @@ 'Excel.WorkbookRangeAreas#areas:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml + 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"); @@ -4965,7 +4990,7 @@ console.log(`Direct precedent cells of ${range.address}:`); - // Use the direct precedents API to loop through precedents of the active cell. + // Use the direct precedents API to loop through precedents of the active cell. for (var 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"; diff --git a/view-prod/excel.json b/view-prod/excel.json index 5f7ea79ba..312308f36 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -68,7 +68,7 @@ "excel-range-range-relationships": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-relationships.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/selected-range.yaml", - "excel-direct-precedents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/direct-precedents.yaml", + "excel-precedents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml", "excel-range-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.yaml", "excel-range-text-orientation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-text-orientation.yaml", "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/dynamic-arrays.yaml", diff --git a/view/excel.json b/view/excel.json index 8776fe57b..7a2e02f80 100644 --- a/view/excel.json +++ b/view/excel.json @@ -68,7 +68,7 @@ "excel-range-range-relationships": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-relationships.yaml", "excel-range-remove-duplicates": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-remove-duplicates.yaml", "excel-range-selected-range": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/selected-range.yaml", - "excel-direct-precedents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/direct-precedents.yaml", + "excel-precedents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/precedents.yaml", "excel-range-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/style.yaml", "excel-range-text-orientation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-text-orientation.yaml", "excel-range-dynamic-arrays": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/dynamic-arrays.yaml", From 080e6be52fa64a7ec323502f6e72b2b4b8b14b31 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:40:11 -0700 Subject: [PATCH 037/336] [tooling] (Playlist) Switch excel package to exceljs (#561) * Partial work * Fixing map * Build array * Running without sort * Remove compiler warning for sorting --- .yarnrc | 1 - config/build.documentation.ts | 52 ++-- config/build.ts | 4 +- config/helpers.ts | 4 +- package.json | 4 +- yarn.lock | 467 ++++++++++++++++++++++++++++------ 6 files changed, 417 insertions(+), 115 deletions(-) delete mode 100644 .yarnrc diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index efdac8b82..000000000 --- a/.yarnrc +++ /dev/null @@ -1 +0,0 @@ ---install.frozen-lockfile true \ No newline at end of file diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 237f79279..213a1830c 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -5,7 +5,7 @@ import { Dictionary } from './helpers'; import { SnippetProcessedData, banner, readDir, officeHostsToAppNames, writeFile, rmRf, mkDir } from './helpers'; import { status } from './status'; -import parseXlsx from 'excel'; +const ExcelJS = require('exceljs'); const SNIPPET_EXTRACTOR_METADATA_FOLDER_NAME = 'snippet-extractor-metadata'; @@ -47,44 +47,41 @@ async function buildSnippetExtractsPerHost( ): Promise<{ [key: string]: string[] }> { const hostName = officeHostsToAppNames[ filename.substr(0, filename.length - '.xlsx'.length).toUpperCase()]; - banner(`Extracting reference-doc snippet bits for ${hostName}`); const lines: MappingFileRowData[] = - await new Promise((resolve: (data: MappingFileRowData[]) => void, reject) => { + await new Promise(async (resolve: (data: MappingFileRowData[]) => void, reject) => { const fullFilePath = path.join( path.resolve(SNIPPET_EXTRACTOR_METADATA_FOLDER_NAME), filename ); - parseXlsx(fullFilePath).then((data) => { - if (data.length < 2) { - reject(new Error('No data rows found')); - } - - if (data[0].length !== headerNames.length) { - reject( - new Error('Unexpected number of columns. Expecting the following ' + - headerNames.length + ' columns: ' + - headerNames.map(name => `"${name}"`).join(', ') - ) - ); - } - - // Remove the first line, since it's the header line - data.splice(0, 1); + const workbook = new ExcelJS.Workbook(); + await workbook.xlsx.readFile(fullFilePath); + const worksheet = workbook.worksheets[0]; + if (worksheet.rowCount < 2) { + reject(new Error('No data rows found')); + } - resolve(data.map((row: string[]) => { - if (row.find(text => text.startsWith('//'))) { - return null; - } + if (worksheet.getRow(1).cellCount !== headerNames.length) { + reject( + new Error('Unexpected number of columns. Expecting the following ' + + headerNames.length + ' columns: ' + + headerNames.map(name => `"${name}"`).join(', ') + ) + ); + } + let mappedRowData: MappingFileRowData[] = []; + worksheet.eachRow((row, rowNumber) => { + if (rowNumber !== 1 && !row.getCell(1).value.startsWith('//')) { let result: MappingFileRowData = {} as any; - row.forEach((column: string, index) => { - result[headerNames[index]] = column; + row.eachCell((cell, index) => { + result[headerNames[index - 1]] = cell.value; }); - return result; - }).filter(item => item)); + mappedRowData.push(result); + } }); + resolve(mappedRowData.filter(item => item)); }); const allSnippetData: { [key: string]: string[] } = {}; @@ -102,7 +99,6 @@ async function buildSnippetExtractsPerHost( } allSnippetData[fullName].push(text); }); - return allSnippetData; } diff --git a/config/build.ts b/config/build.ts index bd47124f6..43cbe3392 100644 --- a/config/build.ts +++ b/config/build.ts @@ -505,7 +505,7 @@ async function generatePlaylists(processedSnippets: Dictionary { const creatingStatusText = `Creating ${host}.yaml`; status.add(creatingStatusText); - items = sortBy(items, sortingCriteria); + items = sortBy(items, sortingCriteria) as any; /* Having sorted the items -- which may have included a number in the group name! -- remove the group number if any @@ -559,7 +559,7 @@ async function generatePlaylists(processedSnippets: Dictionary { const creatingStatusText = `Creating ${host}.json`; status.add(creatingStatusText); - items = sortBy(items, sortingCriteria); + items = sortBy(items, sortingCriteria) as any; let hostMapping = {} as { [id: string]: string }; items.forEach(item => { diff --git a/config/helpers.ts b/config/helpers.ts index 9b9982875..af8dfa7f5 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -124,7 +124,7 @@ export const readDir = (dir: string) => * @param contents */ export const writeFile = (filename: string, contents: string) => - new Promise((resolve, reject) => { + new Promise((resolve, reject) => { fs.writeFile(filename, contents, (err) => { if (err) { return reject(err); @@ -164,7 +164,7 @@ export function getFileMetadata(fullPath: string, root: string): SnippetFileInpu /* Additional must be null or empty */ if (additional && additional.length > 0) { - throw new Error(`Invalid folder structure at ${chalk.bold.red(relativePath)}.File ${chalk.bold.yellow(name)} was located too deep.`); + throw new Error(`Invalid folder structure at ${chalk.bold.red(relativePath)}.File ${chalk.bold.yellow(file_name)} was located too deep.`); } if (host == null) { diff --git a/package.json b/package.json index bdf14c859..5aa32195c 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "dependencies": { "chalk": "1.1.3", "escape-string-regexp": "^2.0.0", - "excel": "^1.0.1", + "exceljs": "^4.3.0", "fs-extra": "3.0.1", "js-yaml": "^3.13.1", "lodash": "^4.17.21", @@ -37,7 +37,7 @@ "@types/chalk": "0.4.31", "@types/fs-extra": "3.0.1", "@types/js-yaml": "^3.12.0", - "@types/lodash": "^4.14.122", + "@types/lodash": "^4.14.175", "@types/node": "^11.10.5", "@types/shelljs": "^0.8.3", "tslint": "^6.1.0", diff --git a/yarn.lock b/yarn.lock index 7d51b3206..e42ba990f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,16 +3,16 @@ "@babel/code-frame@^7.0.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== dependencies: "@babel/highlight" "^7.14.5" "@babel/helper-validator-identifier@^7.14.5": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== "@babel/highlight@^7.14.5": version "7.14.5" @@ -23,6 +23,31 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@fast-csv/format@4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@fast-csv/format/-/format-4.3.5.tgz#90d83d1b47b6aaf67be70d6118f84f3e12ee1ff3" + 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.yarnpkg.com/@fast-csv/parse/-/parse-4.3.6.tgz#ee47d0640ca0291034c7aa94039a744cfb019264" + 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.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" @@ -48,10 +73,10 @@ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.7.tgz#330c5d97a3500e9c903210d6e49f02964af04a0e" integrity sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ== -"@types/lodash@^4.14.122": - version "4.14.172" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.172.tgz#aad774c28e7bfd7a67de25408e03ee5a8c3d028a" - integrity sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw== +"@types/lodash@^4.14.175": + version "4.14.175" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.175.tgz#b78dfa959192b01fae0ad90e166478769b215f45" + integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== "@types/minimatch@*": version "3.0.5" @@ -59,15 +84,20 @@ integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "16.4.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.12.tgz#961e3091f263e6345d2d84afab4e047a60b4b11b" - integrity sha512-zxrTNFl9Z8boMJXs6ieqZP0wAhvkdzmHSxTlJabM16cf5G9xBc1uPRH5Bbv2omEDDiM8MzTfqTJXBf0Ba4xFWA== + version "16.10.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" + integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== "@types/node@^11.10.5": version "11.15.54" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.54.tgz#59ed60e7b0d56905a654292e8d73275034eb6283" integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== +"@types/node@^14.0.1": + version "14.17.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.21.tgz#6359d8cf73481e312a43886fa50afc70ce5592c6" + integrity sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA== + "@types/shelljs@^0.8.3": version "0.8.9" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.9.tgz#45dd8501aa9882976ca3610517dac3831c2fbbf4" @@ -93,6 +123,35 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + 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.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" + 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.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -100,15 +159,25 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +async@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" + integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + big-integer@^1.6.17: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + version "1.6.49" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.49.tgz#f6817d3ea5d4f3fb19e24df9f4b1b4471a8328ce" + integrity sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw== binary@~0.3.0: version "0.3.0" @@ -118,6 +187,15 @@ binary@~0.3.0: buffers "~0.1.1" chainsaw "~0.1.0" +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + 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.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" @@ -131,15 +209,23 @@ brace-expansion@^1.1.7: 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.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-indexof-polyfill@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" buffers@~0.1.1: version "0.1.1" @@ -219,15 +305,46 @@ commander@^2.12.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +compress-commons@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" + 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.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + 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.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" + 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.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" + integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== diff@^4.0.1: version "4.0.2" @@ -241,6 +358,13 @@ duplexer2@~0.1.4: dependencies: readable-stream "^2.0.2" +end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -256,20 +380,44 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -excel@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/excel/-/excel-1.0.1.tgz#d6cf6a912cd3517a8b78861770a8e4d9be0919f2" - integrity sha512-Hr9p8R/rqZqMrqLa4OHP405BEFKG9Bg2W8Sb4YqRJJP70/lDJbJHZWY4E1wYI9qyavOjp3kheOSM7EzCYcU1nA== - dependencies: - unzipper "^0.8.11" - xmldom "^0.1.27" - xpath "0.0.27" +exceljs@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.3.0.tgz#939bc0d4c59c200acadb7051be34d25c109853c4" + 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.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +fast-csv@^4.3.1: + version "4.3.6" + resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-4.3.6.tgz#70349bdd8fe4d66b1130d8c91820b64a21bc4a63" + 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.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -284,7 +432,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fstream@~1.0.10: +fstream@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== @@ -299,10 +447,10 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -311,10 +459,10 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +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.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== has-ansi@^2.0.0: version "2.0.0" @@ -335,6 +483,16 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -343,7 +501,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -354,9 +512,9 @@ interpret@^1.0.0: integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== is-core-module@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" - integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== + version "2.7.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" + integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== dependencies: has "^1.0.3" @@ -385,11 +543,100 @@ jsonfile@^3.0.0: optionalDependencies: graceful-fs "^4.1.6" +jszip@^3.5.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" + integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + listenercount@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.groupby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" + integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + +lodash.isnil@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" + integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isundefined@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" + integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= + +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -424,7 +671,12 @@ node-status@^1.0.0: cli-spinners "0.2.0" colors "1.1.2" -once@^1.3.0: +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -436,6 +688,11 @@ onetime@^1.0.0: resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -446,17 +703,17 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -readable-stream@^2.0.2: +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -469,18 +726,21 @@ readable-stream@^2.0.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA= +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdir-glob@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" + integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== + dependencies: + minimatch "^3.0.4" rechoir@^0.6.2: version "0.6.2" @@ -524,11 +784,28 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + semver@^5.3.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -548,10 +825,12 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" @@ -579,6 +858,24 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +tar-stream@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + 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.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + "traverse@>=0.3.0 <0.4": version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" @@ -625,37 +922,47 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unzipper@^0.8.11: - version "0.8.14" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" - integrity sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w== +unzipper@^0.10.11: + version "0.10.11" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" + 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.10" + fstream "^1.0.12" + graceful-fs "^4.2.2" listenercount "~1.0.1" - readable-stream "~2.1.5" + readable-stream "~2.3.6" setimmediate "~1.0.4" -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -xmldom@^0.1.27: - version "0.1.31" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" - integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xpath@0.0.27: - version "0.0.27" - resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" - integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== +zip-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" + integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== + dependencies: + archiver-utils "^2.1.0" + compress-commons "^4.1.0" + readable-stream "^3.6.0" From 4a6a585d9419f50b52f14b23ea92b3b0dcfb22da Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 21 Oct 2021 12:03:25 -0700 Subject: [PATCH 038/336] [Excel] (ExcelApi 1.14) Add chart data table code sample (#566) * [Excel] (ExcelApi 1.14) Add chart data table code sample * Update excel.xlsx and run yarn start * Update chart data table sample * Update samples/excel/10-chart/chart-data-table.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Update order for chart data table sample, and adjust others as a result * Incorporate feedback from code review * Run yarn start * Incorporate feedback from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- package-lock.json | 1217 +++++++++++++++++ playlists-prod/excel.yaml | 9 + playlists/excel.yaml | 9 + .../excel/10-chart/chart-bubble-chart.yaml | 2 +- .../10-chart/chart-create-several-charts.yaml | 2 +- samples/excel/10-chart/chart-data-table.yaml | 164 +++ samples/excel/10-chart/chart-formatting.yaml | 2 +- samples/excel/10-chart/chart-legend.yaml | 2 +- samples/excel/10-chart/chart-point.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 +- .../excel/10-chart/chart-title-format.yaml | 2 +- samples/excel/10-chart/chart-trendlines.yaml | 2 +- .../excel/10-chart/create-doughnut-chart.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 24547 -> 24880 bytes snippet-extractor-output/snippets.yaml | 230 ++++ view-prod/excel.json | 1 + view/excel.json | 1 + 19 files changed, 1642 insertions(+), 11 deletions(-) create mode 100644 package-lock.json create mode 100644 samples/excel/10-chart/chart-data-table.yaml diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..03e9f2a0e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1217 @@ +{ + "name": "office-js-snippets", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "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==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "requires": { + "@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" + }, + "dependencies": { + "@types/node": { + "version": "14.17.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.27.tgz", + "integrity": "sha512-94+Ahf9IcaDuJTle/2b+wzvjmutxXAEXU6O81JHblYXUg2BDG+dnBy7VxIPHKAyEEDHzCMQydTJuWvrE+Aanzw==" + } + } + }, + "@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "requires": { + "@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" + }, + "dependencies": { + "@types/node": { + "version": "14.17.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.27.tgz", + "integrity": "sha512-94+Ahf9IcaDuJTle/2b+wzvjmutxXAEXU6O81JHblYXUg2BDG+dnBy7VxIPHKAyEEDHzCMQydTJuWvrE+Aanzw==" + } + } + }, + "@types/chalk": { + "version": "0.4.31", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", + "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", + "dev": true + }, + "@types/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/js-yaml": { + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.6.tgz", + "integrity": "sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.175", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", + "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/node": { + "version": "11.15.44", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.44.tgz", + "integrity": "sha512-fHAcNn2FlzDMA9rV5KP73r1cMZdbommWic2foHAEWoa/LITi91AueHDsJpnqjBEJ7bYoT2WC+KN1RL0vsM20zA==", + "dev": true + }, + "@types/shelljs": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.8.tgz", + "integrity": "sha512-lD3LWdg6j8r0VRBFahJVaxoW0SIcswxKaFUrmKl33RJVeeoNYQAz4uqCJ5Z6v4oIBOsC5GozX+I5SorIKiTcQA==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "requires": { + "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" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "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" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "async": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-indexof-polyfill": { + "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==" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "charm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", + "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", + "requires": { + "inherits": "^2.0.1" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-spinners": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", + "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "commander": { + "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==", + "dev": true + }, + "compress-commons": { + "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==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "end-of-stream": { + "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==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "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": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "exceljs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", + "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", + "requires": { + "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" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "requires": { + "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" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + } + } + } + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + }, + "exit-on-epipe": { + "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": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "requires": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + } + }, + "fs-constants": { + "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": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "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": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "requires": { + "has": "^1.0.3" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jszip": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node-status": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", + "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", + "requires": { + "charm": "1.0.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "0.2.0", + "colors": "1.1.2" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "printj": { + "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": { + "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": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "set-immediate-shim": { + "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": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "typescript": { + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", + "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + } + } +} diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 9d25f04fd..15cd63633 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -45,6 +45,15 @@ group: Chart api_set: ExcelApi: '1.8' +- id: excel-chart-data-table + name: Chart data table + fileName: chart-data-table.yaml + description: Add a data table to a chart and then format that data table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + group: Chart + api_set: + ExcelApi: '1.14' - id: excel-chart-bubble-chart name: Create bubble chart fileName: chart-bubble-chart.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index a7c143dc6..56de7d5d4 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -45,6 +45,15 @@ group: Chart api_set: ExcelApi: '1.8' +- id: excel-chart-data-table + name: Chart data table + fileName: chart-data-table.yaml + description: Add a data table to a chart and then format that data table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-table.yaml + group: Chart + api_set: + ExcelApi: '1.14' - id: excel-chart-bubble-chart name: Create bubble chart fileName: chart-bubble-chart.yaml diff --git a/samples/excel/10-chart/chart-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index 9c5228e59..108325244 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: excel-chart-bubble-chart name: Create bubble chart description: Creates a bubble chart with each data row represented as a single chart series (bubble). diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index 10a7a11cd..9eb865bed 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -1,4 +1,4 @@ -order: 4 +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.' diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml new file mode 100644 index 000000000..fc07e1b6a --- /dev/null +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -0,0 +1,164 @@ +order: 3 +id: excel-chart-data-table +name: Chart data table +description: Add a data table to a chart and then format that data table. +host: EXCEL +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)); + + async function createColumnClusteredChart() { + await Excel.run(async (context) => { + // This method creates a clustered column chart based on data from a table on this worksheet and then sets name, position, and format for the chart. + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Create a clustered column chart with data from "SalesTable". + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + const chart = sheet.charts.add("ColumnClustered", dataRange, "Auto"); + + // Set name, position, and format for the chart. + chart.name = "SalesChart"; + chart.title.text = "Quarterly sales chart"; + chart.setPosition("A9", "L20"); + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + + const points = chart.series.getItemAt(0).points; + points.getItemAt(0).format.fill.setSolidColor("pink"); + points.getItemAt(1).format.fill.setSolidColor("indigo"); + + await context.sync(); + }); + } + + async function addChartDataTable() { + await Excel.run(async (context) => { + // This method adds a data table to a chart that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the data table object for the chart and set it to visible. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load("visible"); + chartDataTable.visible = true; + await context.sync(); + }); + } + + async function formatChartDataTable() { + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + let expensesTable = sheet.tables.add("A1:E1", true); + expensesTable.name = "SalesTable"; + expensesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + expensesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 4377], + ["Saddles", 400, 323, 276, 651], + ["Brake levers", 12000, 8766, 8456, 9812], + ["Chains", 1550, 1088, 692, 853], + ["Mirrors", 225, 600, 923, 544], + ["Spokes", 6005, 7634, 4589, 8765] + ]); + + 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 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: | + 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/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index b852a2e29..74cbe8706 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-chart-formatting name: Formatting description: Formats labels and lines of a slope chart. diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index bd95dae97..9275934e9 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: excel-chart-legend name: Legend description: Formats the legend's font. diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index 6370a490c..582fecda5 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: excel-chart-point name: Points description: Sets the color of a point on the chart. diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 2aec1f275..307aa18c0 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: excel-chart-series-markers name: Series markers description: Sets the chart series marker properties. diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index c8c7a14d1..2d1db67a8 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: excel-chart-series-plotorder name: Series plot order description: Orders the plotting of series in a chart. diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 88b71fd33..a7c73fe60 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-chart-series name: Series description: Adds and deletes series in a chart. diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 3dfee0e3a..85d6674c3 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -1,4 +1,4 @@ -order: 12 +order: 13 id: excel-chart-title-format name: Title format description: Adjust a chart title's format. diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index c9af58528..4772af54c 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: excel-chart-trendlines name: Trendlines description: 'Adds, gets, and formats trendlines in a chart.' diff --git a/samples/excel/10-chart/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index b7d8c3815..c618f49fb 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-chart-create-doughnut-chart name: Doughnut chart description: Creates a doughnut chart and adjusts its size. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 1de0bd8f6ec00c30e16cad1c33fef63ce4dd8717..8dc750f38930ce019f2d295e1127df6384ac6d60 100644 GIT binary patch delta 15064 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 X|BXfaU(+_~By}2*Lv!i>=k5Okg7qxz delta 14751 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 Mukgp(|Eci*06{O*kN^Mx diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 53a793178..ffe4ad7a1 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -511,6 +511,236 @@ console.log("The pie chart is NOT active."); }); } +'Excel.ChartDataTable#getDataTableOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + + await Excel.run(async (context) => { + // This method adds a data table to a chart that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the data table object for the chart and set it to visible. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load("visible"); + chartDataTable.visible = true; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adds a data table to a chart that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the data table object for the chart and set it to visible. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load("visible"); + chartDataTable.visible = true; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method adjusts the display and format of a chart data table that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the chart data table object and load its properties. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load(); + + // Set the display properties of the chart data table. + chartDataTable.showLegendKey = true; + chartDataTable.showHorizontalBorder = false; + chartDataTable.showVerticalBorder = true; + chartDataTable.showOutlineBorder = true; + + // Retrieve the chart data table format object and set font and border properties. + const chartDataTableFormat = chartDataTable.format; + chartDataTableFormat.font.color = "#B76E79"; + chartDataTableFormat.font.name = "Comic Sans"; + chartDataTableFormat.border.color = "blue"; + await context.sync(); + }); 'Excel.ChartFill#setSolidColor:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 312308f36..6b69dbb3e 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -4,6 +4,7 @@ "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/01-basics/basic-common-api-call.yaml", "excel-chart-axis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis.yaml", "excel-chart-axis-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-axis-formatting.yaml", + "excel-chart-data-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml", "excel-chart-bubble-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-bubble-chart.yaml", "excel-chart-create-several-charts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-create-several-charts.yaml", "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/create-doughnut-chart.yaml", diff --git a/view/excel.json b/view/excel.json index 7a2e02f80..d61a510de 100644 --- a/view/excel.json +++ b/view/excel.json @@ -4,6 +4,7 @@ "excel-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/01-basics/basic-common-api-call.yaml", "excel-chart-axis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis.yaml", "excel-chart-axis-formatting": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-axis-formatting.yaml", + "excel-chart-data-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-table.yaml", "excel-chart-bubble-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-bubble-chart.yaml", "excel-chart-create-several-charts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-create-several-charts.yaml", "excel-chart-create-doughnut-chart": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/create-doughnut-chart.yaml", From 34d9bc03240443ac296c170c6d15f3c8a3e1bad6 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 22 Oct 2021 16:27:04 -0700 Subject: [PATCH 039/336] [Excel] (ExcelApi 1.14) Update AutoFilter code sample (#567) * [Excel] (ExcelApi 1.14) Update AutoFilter code sample * Add intro comments to sample methods * Run yarn start * Adjust formatting * Incorporate feedback from code review * Incorporate feedback from code review * Run yarn start * Fix typo * Adjust formatting * Adjust formatting * Fix typo * Update samples/excel/54-worksheet/worksheet-auto-filter.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../54-worksheet/worksheet-auto-filter.yaml | 112 ++++++++++++++---- snippet-extractor-metadata/excel.xlsx | Bin 24880 -> 24991 bytes snippet-extractor-output/snippets.yaml | 90 +++++++++++++- 3 files changed, 174 insertions(+), 28 deletions(-) diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index bb4178d93..9c928d46c 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -8,18 +8,47 @@ api_set: script: content: | $("#setup").click(() => tryCatch(setup)); - $("#add-auto-filter").click(() => tryCatch(addAutoFilter)); + $("#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)); - $("#remove-auto-filter").click(() => tryCatch(removeAutoFilter)); + $("#clear-single-auto-filter").click(() => tryCatch(clearSingleAutoFilter)); + $("#remove-all-auto-filters").click(() => tryCatch(removeAllAutoFilters)); - async function addAutoFilter() { + async function addPercentAutoFilter() { await Excel.run(async (context) => { + // This method adds a percentage AutoFilter to the active worksheet + // and applies the filter to a column of the used range. + + // 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(); + }); + } + + async function addCustomAutoFilter() { + await Excel.run(async (context) => { + // This method adds a custom AutoFilter to the active worksheet + // and applies the filter to a column of the used range. + + // Retrieve the active worksheet and the used range on that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); const farmData = sheet.getUsedRange(); - // This filter will only show the rows with the top 25% of values in column 3. - sheet.autoFilter.apply(farmData, 3, { criterion1: "25", filterOn: Excel.FilterOn.topPercent }); + // Add a filter that will only show the rows with values that end with the letter "e" in column 1. + sheet.autoFilter.apply(farmData, 1, { + criterion1: "=*e", + filterOn: Excel.FilterOn.custom + }); + await context.sync(); }); } @@ -41,15 +70,38 @@ script: async function refreshAutoFilter() { await Excel.run(async (context) => { + // This method refreshes the AutoFilter to ensure that changes are captured. + + // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Reapply the filter to capture changes. sheet.autoFilter.reapply(); await context.sync(); }); } - async function removeAutoFilter() { + async function clearSingleAutoFilter() { await Excel.run(async (context) => { + // This method clears the AutoFilter setting from one column. + + // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Clear the filter from only column 3. + sheet.autoFilter.clearColumnCriteria(3); + await context.sync(); + }); + } + + async function removeAllAutoFilters() { + await Excel.run(async (context) => { + // This method removes all AutoFilters from the active worksheet. + + // Retrieve the active worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Remove all filters. sheet.autoFilter.remove(); await context.sync(); }); @@ -83,11 +135,13 @@ script: ["F Farms", "Kiwi", "Organic", 150], ["F Farms", "Lemon", "Conventional", 270] ]; + const range = dataSheet.getRange("A1:D21"); range.values = data; dataSheet.getRange("A1:D1").format.font.bold = true; range.format.autofitColumns(); dataSheet.activate(); + await context.sync(); }); } @@ -105,33 +159,43 @@ script: template: content: |-
-

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

+

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

-

Setup

-
+
-

Try it out

- +

+ +

+ +

+

When the data in the worksheet or table changes, the AutoFilter needs to be refreshed by your add-in.

+ +

+ -

- -

-

When the data in the worksheet or table changes, the AutoFilter needs to be refreshed by your add-in.

- -

-

language: html style: diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 8dc750f38930ce019f2d295e1127df6384ac6d60..a2c75cc494f2700cd9c7c256c72c20563b3f6e61 100644 GIT binary patch delta 14918 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

O2AeT5#SYnR)UWkf=P#CG_7yGPv}a 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 M { + // This method adds a percentage AutoFilter to the active worksheet + // and applies the filter to a column of the used range. + + // Retrieve the active worksheet and the used range on that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); const farmData = sheet.getUsedRange(); - // This filter will only show the rows with the top 25% of values in column 3. - sheet.autoFilter.apply(farmData, 3, { criterion1: "25", filterOn: Excel.FilterOn.topPercent }); + // 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.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 + + await Excel.run(async (context) => { + // This method refreshes the AutoFilter to ensure that changes are captured. + + // Retrieve the active worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Reapply the filter to capture changes. + sheet.autoFilter.reapply(); + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method clears the AutoFilter setting from one column. + + // Retrieve the active worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Clear the filter from only column 3. + sheet.autoFilter.clearColumnCriteria(3); + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // This method removes all AutoFilters from the active worksheet. + + // Retrieve the active worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // Remove all filters. + sheet.autoFilter.remove(); await context.sync(); }); 'Excel.Binding#onDataChanged:member': @@ -2417,6 +2470,27 @@ console.log(`${property.key}:${property.value}`); }); }); +'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 + + await Excel.run(async (context) => { + // This method adds a percentage AutoFilter to the active worksheet + // and applies the filter to a column of the used range. + + // 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.IconSetConditionalFormat#criteria:member': - >- // Link to full sample: @@ -5234,11 +5308,19 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml await Excel.run(async (context) => { + // This method adds a percentage AutoFilter to the active worksheet + // and applies the filter to a column of the used range. + + // Retrieve the active worksheet and the used range on that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); const farmData = sheet.getUsedRange(); - // This filter will only show the rows with the top 25% of values in column 3. - sheet.autoFilter.apply(farmData, 3, { criterion1: "25", filterOn: Excel.FilterOn.topPercent }); + // 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)': From a071e2612bda47aaf779c989a724a817ae9ffd25 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 25 Oct 2021 16:05:22 -0700 Subject: [PATCH 040/336] [Excel] (ExcelApi 1.14) Add worksheet protection change events code sample (#570) * [Excel] (ExcelApi 1.14) Add worksheet protection change events code sample * Change name of test worksheet * Expand event handler method * Run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Re-run yarn start after incorporating code review changes Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 79 +++++++------ playlists/excel.yaml | 79 +++++++------ .../30-events/data-change-event-details.yaml | 2 +- samples/excel/30-events/data-changed.yaml | 2 +- .../event-worksheet-single-click.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 | 111 ++++++++++++++++++ samples/excel/30-events/events-worksheet.yaml | 2 +- .../30-events/selection-changed-events.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 24991 -> 25180 bytes snippet-extractor-output/snippets.yaml | 85 ++++++++++++++ view-prod/excel.json | 9 +- view/excel.json | 9 +- 19 files changed, 308 insertions(+), 88 deletions(-) create mode 100644 samples/excel/30-events/events-worksheet-protection.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 15cd63633..ee9aff895 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -339,6 +339,17 @@ group: Events api_set: ExcelApi: '1.10' +- id: excel-events-comments + name: Comment events + fileName: events-comment-event-handler.yaml + description: >- + Registers event handlers to listen for comment additions, changes, and + deletions. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml + group: Events + api_set: + ExcelAPI: '1.12' - id: excel-events-data-changed name: Data changed event fileName: data-changed.yaml @@ -366,6 +377,15 @@ group: Events api_set: ExcelApi: '1.8' +- id: excel-events-formula-changed + name: Formula changed event + fileName: events-formula-changed.yaml + description: Registers an event handler to detect changes to formulas. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml + group: Events + api_set: + ExcelAPI: '1.13' - id: excel-selection-changed-events name: Selection changed events fileName: selection-changed-events.yaml @@ -377,6 +397,15 @@ group: Events api_set: ExcelApi: '1.7' +- id: excel-events-tablecollection-changed + name: Table collection events + fileName: events-tablecollection-changed.yaml + description: Registers an event handler that runs when a table collection is changed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml + group: Events + api_set: + ExcelApi: '1.7' - id: excel-event-worksheet-single-click name: Single click event fileName: event-worksheet-single-click.yaml @@ -388,15 +417,6 @@ group: Events api_set: ExcelApi: '1.10' -- id: excel-events-tablecollection-changed - name: Table collection events - fileName: events-tablecollection-changed.yaml - description: Registers an event handler that runs when a table collection is changed. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml - group: Events - api_set: - ExcelApi: '1.7' - id: excel-events-table-changed name: Table events fileName: events-table-changed.yaml @@ -406,6 +426,15 @@ group: Events api_set: ExcelApi: '1.7' +- id: excel-events-workbook-activated + name: Workbook activated event + fileName: events-workbook-activated.yaml + description: This sample shows how to register a workbook activated event handler. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + group: Events + api_set: + ExcelAPI: '1.13' - id: excel-events-workbook-and-worksheet-collection name: Workbook and worksheet collection events fileName: events-workbook-and-worksheet-collection.yaml @@ -428,35 +457,17 @@ group: Events api_set: ExcelApi: '1.7' -- id: excel-events-comments - name: Comment events - fileName: events-comment-event-handler.yaml +- id: excel-events-worksheet-protection + name: Worksheet protection events + fileName: events-worksheet-protection.yaml description: >- - Registers event handlers to listen for comment additions, changes, and - deletions. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml - group: Events - api_set: - ExcelAPI: '1.12' -- id: excel-events-formula-changed - name: Formula changed event - fileName: events-formula-changed.yaml - description: Registers an event handler to detect changes to formulas. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml - group: Events - api_set: - ExcelAPI: '1.13' -- id: excel-events-workbook-activated - name: Workbook activated event - fileName: events-workbook-activated.yaml - description: This sample shows how to register a workbook activated event handler. + Registers an event handler to listen for worksheet protection status + changes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml group: Events api_set: - ExcelAPI: '1.13' + ExcelAPI: '1.14' - id: excel-named-item-create-and-remove-named-item name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 56de7d5d4..65e1407c4 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -339,6 +339,17 @@ group: Events api_set: ExcelApi: '1.10' +- id: excel-events-comments + name: Comment events + fileName: events-comment-event-handler.yaml + description: >- + Registers event handlers to listen for comment additions, changes, and + deletions. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-comment-event-handler.yaml + group: Events + api_set: + ExcelAPI: '1.12' - id: excel-events-data-changed name: Data changed event fileName: data-changed.yaml @@ -366,6 +377,15 @@ group: Events api_set: ExcelApi: '1.8' +- id: excel-events-formula-changed + name: Formula changed event + fileName: events-formula-changed.yaml + description: Registers an event handler to detect changes to formulas. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-formula-changed.yaml + group: Events + api_set: + ExcelAPI: '1.13' - id: excel-selection-changed-events name: Selection changed events fileName: selection-changed-events.yaml @@ -377,6 +397,15 @@ group: Events api_set: ExcelApi: '1.7' +- id: excel-events-tablecollection-changed + name: Table collection events + fileName: events-tablecollection-changed.yaml + description: Registers an event handler that runs when a table collection is changed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-tablecollection-changed.yaml + group: Events + api_set: + ExcelApi: '1.7' - id: excel-event-worksheet-single-click name: Single click event fileName: event-worksheet-single-click.yaml @@ -388,15 +417,6 @@ group: Events api_set: ExcelApi: '1.10' -- id: excel-events-tablecollection-changed - name: Table collection events - fileName: events-tablecollection-changed.yaml - description: Registers an event handler that runs when a table collection is changed. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-tablecollection-changed.yaml - group: Events - api_set: - ExcelApi: '1.7' - id: excel-events-table-changed name: Table events fileName: events-table-changed.yaml @@ -406,6 +426,15 @@ group: Events api_set: ExcelApi: '1.7' +- id: excel-events-workbook-activated + name: Workbook activated event + fileName: events-workbook-activated.yaml + description: This sample shows how to register a workbook activated event handler. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-activated.yaml + group: Events + api_set: + ExcelAPI: '1.13' - id: excel-events-workbook-and-worksheet-collection name: Workbook and worksheet collection events fileName: events-workbook-and-worksheet-collection.yaml @@ -428,35 +457,17 @@ group: Events api_set: ExcelApi: '1.7' -- id: excel-events-comments - name: Comment events - fileName: events-comment-event-handler.yaml +- id: excel-events-worksheet-protection + name: Worksheet protection events + fileName: events-worksheet-protection.yaml description: >- - Registers event handlers to listen for comment additions, changes, and - deletions. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-comment-event-handler.yaml - group: Events - api_set: - ExcelAPI: '1.12' -- id: excel-events-formula-changed - name: Formula changed event - fileName: events-formula-changed.yaml - description: Registers an event handler to detect changes to formulas. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-formula-changed.yaml - group: Events - api_set: - ExcelAPI: '1.13' -- id: excel-events-workbook-activated - name: Workbook activated event - fileName: events-workbook-activated.yaml - description: This sample shows how to register a workbook activated event handler. + Registers an event handler to listen for worksheet protection status + changes. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-worksheet-protection.yaml group: Events api_set: - ExcelAPI: '1.13' + ExcelAPI: '1.14' - id: excel-named-item-create-and-remove-named-item name: 'Create, access, and remove' fileName: create-and-remove-named-item.yaml diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 2b3ecaf9a..b85591d2d 100644 --- a/samples/excel/30-events/data-change-event-details.yaml +++ b/samples/excel/30-events/data-change-event-details.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-data-change-event-details name: Data changed event details description: Uses the onChanged event of a table to determine the specifics of changes. diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index a72583037..f70d88e7a 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: excel-events-data-changed name: Data changed event description: Registers an event handler that runs when data is changed. diff --git a/samples/excel/30-events/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml index 756fbc40d..6e13acac6 100644 --- a/samples/excel/30-events/event-worksheet-single-click.yaml +++ b/samples/excel/30-events/event-worksheet-single-click.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 11 id: excel-event-worksheet-single-click name: Single click event description: Registers an event handler that runs when a single-click event occurs in the current worksheet. diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 6459dedfa..7ba4727d1 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -1,4 +1,4 @@ -order: 13 +order: 4 id: excel-events-comments name: Comment events description: 'Registers event handlers to listen for comment additions, changes, and deletions.' diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 9524450c3..c17486240 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: excel-events-disable-events name: Enable and disable events description: Toggles event firing on and off. diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index f22fddd9c..b9bcd3c85 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -1,4 +1,4 @@ -order: 14 +order: 8 id: excel-events-formula-changed name: Formula changed event description: Registers an event handler to detect changes to formulas. diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index bbbe20fc2..c7d4caf33 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 12 id: excel-events-table-changed name: Table events description: Registers event handlers that run when a table is changed or selected. diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index 18423e54d..e0662c26e 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: excel-events-tablecollection-changed name: Table collection events description: Registers an event handler that runs when a table collection is changed. diff --git a/samples/excel/30-events/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml index 1e774b614..94979e2c8 100644 --- a/samples/excel/30-events/events-workbook-activated.yaml +++ b/samples/excel/30-events/events-workbook-activated.yaml @@ -1,4 +1,4 @@ -order: 15 +order: 13 id: excel-events-workbook-activated name: Workbook activated event description: This sample shows how to register a workbook activated event handler. 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 06010812d..fa446f95d 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -1,4 +1,4 @@ -order: 11 +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.' diff --git a/samples/excel/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml new file mode 100644 index 000000000..11472fb12 --- /dev/null +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -0,0 +1,111 @@ +order: 16 +id: excel-events-worksheet-protection +name: Worksheet protection events +description: Registers an event handler to listen for worksheet protection status changes. +host: EXCEL +api_set: + ExcelAPI: '1.14' +script: + content: | + $("#register-event").click(() => tryCatch(registerEvent)); + $("#change-protection").click(() => tryCatch(changeProtection)); + + async function registerEvent() { + await Excel.run(async (context) => { + // This method registers an event handler for the onProtectionChanged event of a worksheet. + + // Set "Sample" as the active worksheet. + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + sheet.activate(); + + // Register the onProtectionChanged event handler. + sheet.onProtectionChanged.add(checkProtection); + await context.sync(); + console.log("Added a worksheet protection change event handler."); + }); + } + + async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { + await Excel.run(async (context) => { + // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. + const protectionStatus = event.isProtected; + const worksheetId = event.worksheetId; + const source = event.source; + console.log("Protection status changed. Protection status is now: " + protectionStatus + "."); + console.log(" ID of changed worksheet: " + worksheetId + "."); + console.log(" Source of change event: " + source + "."); + }); + } + + async function changeProtection() { + await Excel.run(async (context) => { + // This method toggles the protection status of a worksheet between "protected" and "unprotected". + const sheet = context.workbook.worksheets.getItem("Sample"); + sheet.activate(); + + // Load the protected property of the WorksheetProtection object. + sheet.load("protection/protected"); + await context.sync(); + + // Enable worksheet protection if it's disabled, or disable worksheet protection if it's enabled. + if (sheet.protection.protected) { + sheet.protection.unprotect(); + } else { + sheet.protection.protect(); + } + }); + } + + /** 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 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

+ +

+

Toggle worksheet protection and then try editing a cell on the worksheet.

+ +
+ 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/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index cc075a288..8a686d929 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -1,4 +1,4 @@ -order: 12 +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.' diff --git a/samples/excel/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index 7ebef8e30..285379ebd 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 9 id: excel-selection-changed-events name: Selection changed events description: Registers handlers all the different `onSelectionChanged` events and displays how each event reports the selected addresses. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index a2c75cc494f2700cd9c7c256c72c20563b3f6e61..b3f65aaf8cdeb2fe8c60000adb0e0d22839dcf17 100644 GIT binary patch delta 7415 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 Hzs~;wkOR60 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 80048ef3f..1831542de 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -5517,6 +5517,40 @@ ); }); } +'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 + + await Excel.run(async (context) => { + // This method registers an event handler for the onProtectionChanged event of a worksheet. + + // Set "Sample" as the active worksheet. + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + sheet.activate(); + + // Register the onProtectionChanged event handler. + sheet.onProtectionChanged.add(checkProtection); + await context.sync(); + console.log("Added a worksheet protection change event handler."); + }); + - >- + // 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) { + await Excel.run(async (context) => { + // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. + const protectionStatus = event.isProtected; + const worksheetId = event.worksheetId; + const source = event.source; + console.log("Protection status changed. Protection status is now: " + protectionStatus + "."); + console.log(" ID of changed worksheet: " + worksheetId + "."); + console.log(" Source of change event: " + source + "."); + }); + } 'Excel.Worksheet#onRowSorted:member': - >- // Link to full sample: @@ -5883,6 +5917,57 @@ let activeSheet = context.workbook.worksheets.getActiveWorksheet(); activeSheet.protection.unprotect(password); }); +'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 + + async function checkProtection(event: + Excel.WorksheetProtectionChangedEventArgs) { + await Excel.run(async (context) => { + // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. + const protectionStatus = event.isProtected; + const worksheetId = event.worksheetId; + const source = event.source; + console.log("Protection status changed. Protection status is now: " + protectionStatus + "."); + console.log(" ID of changed worksheet: " + worksheetId + "."); + console.log(" Source of change event: " + source + "."); + }); + } +'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 + + async function checkProtection(event: + Excel.WorksheetProtectionChangedEventArgs) { + await Excel.run(async (context) => { + // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. + const protectionStatus = event.isProtected; + const worksheetId = event.worksheetId; + const source = event.source; + console.log("Protection status changed. Protection status is now: " + protectionStatus + "."); + console.log(" ID of changed worksheet: " + worksheetId + "."); + console.log(" Source of change event: " + source + "."); + }); + } +'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 + + async function checkProtection(event: + Excel.WorksheetProtectionChangedEventArgs) { + await Excel.run(async (context) => { + // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. + const protectionStatus = event.isProtected; + const worksheetId = event.worksheetId; + const source = event.source; + console.log("Protection status changed. Protection status is now: " + protectionStatus + "."); + console.log(" ID of changed worksheet: " + worksheetId + "."); + console.log(" Source of change event: " + source + "."); + }); + } 'Excel.WorksheetSingleClickedEventArgs#address:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 6b69dbb3e..203b0519e 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -36,18 +36,19 @@ "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chartcollection-added-activated.yaml", "excel-events-chart-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-chart-activated.yaml", "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml", + "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-changed.yaml", "excel-data-change-event-details": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/data-change-event-details.yaml", "excel-events-disable-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-disable-events.yaml", + "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml", "excel-selection-changed-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/selection-changed-events.yaml", - "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml", "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-tablecollection-changed.yaml", + "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-worksheet-single-click.yaml", "excel-events-table-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-table-changed.yaml", + "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml", "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", "excel-events-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml", - "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-comment-event-handler.yaml", - "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-formula-changed.yaml", - "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml", + "excel-events-worksheet-protection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml", "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/create-and-remove-named-item.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/34-named-item/update-named-item.yaml", "excel-pivottable-calculations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml", diff --git a/view/excel.json b/view/excel.json index d61a510de..ac5bf4015 100644 --- a/view/excel.json +++ b/view/excel.json @@ -36,18 +36,19 @@ "excel-events-chartcollection-added-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-chartcollection-added-activated.yaml", "excel-events-chart-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-chart-activated.yaml", "excel-event-column-and-row-sort": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/event-column-and-row-sort.yaml", + "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-comment-event-handler.yaml", "excel-events-data-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/data-changed.yaml", "excel-data-change-event-details": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/data-change-event-details.yaml", "excel-events-disable-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-disable-events.yaml", + "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-formula-changed.yaml", "excel-selection-changed-events": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/selection-changed-events.yaml", - "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/event-worksheet-single-click.yaml", "excel-events-tablecollection-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-tablecollection-changed.yaml", + "excel-event-worksheet-single-click": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/event-worksheet-single-click.yaml", "excel-events-table-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-table-changed.yaml", + "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-activated.yaml", "excel-events-workbook-and-worksheet-collection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml", "excel-events-worksheet": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-worksheet.yaml", - "excel-events-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-comment-event-handler.yaml", - "excel-events-formula-changed": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-formula-changed.yaml", - "excel-events-workbook-activated": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-workbook-activated.yaml", + "excel-events-worksheet-protection": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/30-events/events-worksheet-protection.yaml", "excel-named-item-create-and-remove-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/create-and-remove-named-item.yaml", "excel-update-named-item": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/34-named-item/update-named-item.yaml", "excel-pivottable-calculations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-calculations.yaml", From f6d40818abd97b0f5bfc92ac096564b9ad3db661 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 28 Oct 2021 11:54:44 -0700 Subject: [PATCH 041/336] [Excel] (ExcelApi 1.14) Update worksheet events sample with new APIs (#571) * [Excel] (ExcelApi 1.14) Update worksheet events sample with new APIs * Update samples/excel/30-events/events-worksheet.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Update excel.xlsx and run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- samples/excel/30-events/events-worksheet.yaml | 44 +++++++++-- snippet-extractor-metadata/excel.xlsx | Bin 25180 -> 25312 bytes snippet-extractor-output/snippets.yaml | 72 ++++++++++++++++++ 3 files changed, 111 insertions(+), 5 deletions(-) diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index 8a686d929..c20010ad4 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -17,6 +17,8 @@ script: $("#register-onCalculated-handler").click(() => tryCatch(registerOnCalculatedHandler)); $("#recalculate").click(() => tryCatch(recalculate)); + $("#delete-data").click(() => tryCatch(deleteData)); + async function registerSelectionChangedHandler() { await Excel.run(async (context) => { let sheet = context.workbook.worksheets.getItem("Sample"); @@ -96,15 +98,42 @@ script: }); } - async function onChange(event) { + async function deleteData() { await Excel.run(async (context) => { - console.log( - "Handler for worksheet onChanged event has been triggered. Data changed address : " + - event.address - ); + // This method deletes data from a range and sets the delete shift direction to "up". + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("A5:F5"); + range.delete(Excel.DeleteShiftDirection.up); }); } + async function onChange(event: Excel.WorksheetChangedEventArgs) { + await Excel.run(async (context) => { + // This method is an event handler that returns the address, trigger source, + // and insert or delete shift directions of the change. + + // Return the address where change occurred. + console.log(`Handler for worksheet onChanged event has been triggered.`); + console.log(` Data changed address: ` + event.address); + + // Return the source of the event that triggered the change. + console.log(` Data change trigger source: ` + event.triggerSource); + + // Note:insertShiftDirection and deleteShiftDirection are exclusive and both enums can't have a value at the same time. + // If one has a value, then the other will return undefined. + + // If the insert shift direction is defined, return it. + if (event.changeDirectionState.insertShiftDirection) { + console.log(` Cells inserted shift direction: ` + event.changeDirectionState.insertShiftDirection); + } + + // If the delete shift direction is defined, return it. + if (event.changeDirectionState.deleteShiftDirection) { + console.log(` Cells deleted shift direction: ` + event.changeDirectionState.deleteShiftDirection); + } + }); + } + async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); @@ -172,6 +201,11 @@ template: +

Detect insert and delete shift directions

+

Use the "Insert" and "Delete" buttons in the Excel UI to trigger the onChanged event. Or, use the following "Delete" button to see the properties returned by the event when a table row is removed.

+ language: html style: diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index b3f65aaf8cdeb2fe8c60000adb0e0d22839dcf17..61d28b08e25bc80bf2e7ebc2ab937563843e9c49 100644 GIT binary patch delta 7739 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 delta 7620 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 1831542de..a732a97ff 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -5683,6 +5683,78 @@ ); }); } +'Excel.WorksheetChangedEventArgs#changeDirectionState:member': + - >- + // 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) { + await Excel.run(async (context) => { + // This method is an event handler that returns the address, trigger source, + // and insert or delete shift directions of the change. + + // Return the address where change occurred. + console.log(`Handler for worksheet onChanged event has been triggered.`); + console.log(` Data changed address: ` + event.address); + + // Return the source of the event that triggered the change. + console.log(` Data change trigger source: ` + event.triggerSource); + + // Note:insertShiftDirection and deleteShiftDirection are exclusive and both enums can't have a value at the same time. + // If one has a value, then the other will return undefined. + + // If the insert shift direction is defined, return it. + if (event.changeDirectionState.insertShiftDirection) { + console.log(` Cells inserted shift direction: ` + event.changeDirectionState.insertShiftDirection); + } + + // If the delete shift direction is defined, return it. + if (event.changeDirectionState.deleteShiftDirection) { + console.log(` Cells deleted shift direction: ` + event.changeDirectionState.deleteShiftDirection); + } + }); + } + - >- + // 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) => { + // This method deletes data from a range and sets the delete shift direction to "up". + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("A5:F5"); + range.delete(Excel.DeleteShiftDirection.up); + }); +'Excel.WorksheetChangedEventArgs#triggerSource:member': + - >- + // 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) { + await Excel.run(async (context) => { + // This method is an event handler that returns the address, trigger source, + // and insert or delete shift directions of the change. + + // Return the address where change occurred. + console.log(`Handler for worksheet onChanged event has been triggered.`); + console.log(` Data changed address: ` + event.address); + + // Return the source of the event that triggered the change. + console.log(` Data change trigger source: ` + event.triggerSource); + + // Note:insertShiftDirection and deleteShiftDirection are exclusive and both enums can't have a value at the same time. + // If one has a value, then the other will return undefined. + + // If the insert shift direction is defined, return it. + if (event.changeDirectionState.insertShiftDirection) { + console.log(` Cells inserted shift direction: ` + event.changeDirectionState.insertShiftDirection); + } + + // If the delete shift direction is defined, return it. + if (event.changeDirectionState.deleteShiftDirection) { + console.log(` Cells deleted shift direction: ` + event.changeDirectionState.deleteShiftDirection); + } + }); + } 'Excel.WorksheetCollection#getFirst:member(1)': - >- // Link to full sample: From d91937aa72e8189e6e6e3b7460bbbf057803dcd1 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 1 Nov 2021 09:36:17 -0700 Subject: [PATCH 042/336] [Outlook] Requirement set 1.11 (#572) --- playlists-prod/outlook.yaml | 18 +++++++++--------- playlists/outlook.yaml | 18 +++++++++--------- .../session-data-apis.yaml | 9 +++++---- snippet-extractor-metadata/outlook.xlsx | Bin 21026 -> 20943 bytes snippet-extractor-output/snippets.yaml | 14 +++++++------- view-prod/outlook.json | 4 ++-- view/outlook.json | 4 ++-- 7 files changed, 34 insertions(+), 33 deletions(-) rename samples/outlook/{99-preview-apis => 60-event-based-activation}/session-data-apis.yaml (96%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index d749d6d62..875e32b92 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -335,6 +335,15 @@ group: Event Based Activation api_set: Mailbox: '1.10' +- id: outlook-event-based-activation-session-data-apis + name: Work with session data APIs (Compose) + fileName: session-data-apis.yaml + description: 'Set, get, get all, remove, and clear session data in Compose mode.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + group: Event Based Activation + api_set: + Mailbox: '1.11' - id: outlook-delegates-and-shared-folders-get-shared-properties name: Perform an operation as delegate fileName: get-shared-properties.yaml @@ -612,14 +621,5 @@ 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-session-data-apis - name: Work with session data APIs (Compose) - fileName: session-data-apis.yaml - description: 'Set, get, get all, remove, and clear session data in Compose mode.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.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 c948348b2..520c4ac22 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -335,6 +335,15 @@ group: Event Based Activation api_set: Mailbox: '1.10' +- id: outlook-event-based-activation-session-data-apis + name: Work with session data APIs (Compose) + fileName: session-data-apis.yaml + description: 'Set, get, get all, remove, and clear session data in Compose mode.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/session-data-apis.yaml + group: Event Based Activation + api_set: + Mailbox: '1.11' - id: outlook-delegates-and-shared-folders-get-shared-properties name: Perform an operation as delegate fileName: get-shared-properties.yaml @@ -614,12 +623,3 @@ group: Preview APIs api_set: Mailbox: preview -- id: outlook-session-data-apis - name: Work with session data APIs (Compose) - fileName: session-data-apis.yaml - description: 'Set, get, get all, remove, and clear session data in Compose mode.' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/session-data-apis.yaml - group: Preview APIs - api_set: - Mailbox: preview diff --git a/samples/outlook/99-preview-apis/session-data-apis.yaml b/samples/outlook/60-event-based-activation/session-data-apis.yaml similarity index 96% rename from samples/outlook/99-preview-apis/session-data-apis.yaml rename to samples/outlook/60-event-based-activation/session-data-apis.yaml index 758ba3cf7..2d01cff55 100644 --- a/samples/outlook/99-preview-apis/session-data-apis.yaml +++ b/samples/outlook/60-event-based-activation/session-data-apis.yaml @@ -1,9 +1,10 @@ -id: outlook-session-data-apis +order: 2 +id: outlook-event-based-activation-session-data-apis name: Work with session data APIs (Compose) description: 'Set, get, get all, remove, and clear session data in Compose mode.' host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.11' script: content: | $("#setSessionData").click(setSessionData); @@ -106,8 +107,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 core-js@2.4.1/client/core.min.js diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 67a88ee84986290ed80baf75be82d62f2374e4f2..ef75db06a5d0f9581f12a3b0b25eea2c96aa7e1f 100644 GIT binary patch delta 10444 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
?sP*$V5AFWm z`!bjqzmDbMhVdBFmI41jC*7cdP*DuTrC)__!@3>ow&uzo&-joB@AKznDlZE5cJ`>L z5Wh!Xx@IOf4)vI|OAyBl3DMFPc=Bg)2w2YaeazV2@Xx4o)F=vn27&PsKNQSlf@NO4 ztHnKiz2|E56nmJ6L{O{uQ5WU^4Er@Hf#F9X7|N`q|IIa#!oiV@!@&`~45j?f^9)f} zmWB_5d{Y*KM}{maQ<43@3l|6u4*!1yUshP$kT`Ba2#X36!h-B5j#A|ME{DicDT2t-;{6QNZUlBuc=F9-RnDvkh_gmg)gLX_2TNdN7;(#yTm k1_2HZ_y05E4*8-cf^aJXX;u?LXq1CotASAF6#t3*F9IaYO#lD@ delta 10556 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a732a97ff..8c69b2834 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10107,7 +10107,7 @@ 'Office.AppointmentCompose#sessionData:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -10119,7 +10119,7 @@ 'Office.MessageCompose#sessionData:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -10131,7 +10131,7 @@ 'Office.SessionData#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml Office.context.mailbox.item.sessionData.setAsync( "Date", @@ -10146,7 +10146,7 @@ 'Office.SessionData#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAsync( "Date", @@ -10160,7 +10160,7 @@ 'Office.SessionData#getAllAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -10172,7 +10172,7 @@ 'Office.SessionData#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml Office.context.mailbox.item.sessionData.removeAsync( "Date", @@ -10187,7 +10187,7 @@ 'Office.SessionData#clearAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml Office.context.mailbox.item.sessionData.clearAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 792648df3..0023bdfcf 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -35,6 +35,7 @@ "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml", + "outlook-event-based-activation-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml", "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", @@ -64,6 +65,5 @@ "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/session-data-apis.yaml" + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 04d960389..a76f35c2b 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -35,6 +35,7 @@ "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-with-attachments.yaml", "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml", + "outlook-event-based-activation-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/session-data-apis.yaml", "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", @@ -64,6 +65,5 @@ "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/session-data-apis.yaml" + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" } \ No newline at end of file From 74066cdeeeb912e5389a3d35ea0af4333786e56f Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 11 Nov 2021 14:34:43 -0800 Subject: [PATCH 043/336] [excel] (Performance) Adding calculation mode toggling to performance sample (#576) * Adding calculation mode toggling to performance sample * Apply suggestions from code review Co-authored-by: Alison McKay * Apply suggestions from code review Co-authored-by: Alison McKay * Incorporating feedback and rerunning yarn start * Update samples/excel/90-scenarios/performance-optimization.yaml Co-authored-by: Alison McKay Co-authored-by: Alison McKay --- playlists-prod/excel.yaml | 4 +- playlists/excel.yaml | 4 +- .../performance-optimization.yaml | 170 +- snippet-extractor-metadata/excel.xlsx | Bin 25312 -> 25398 bytes snippet-extractor-output/snippets.yaml | 2149 +++++++++-------- 5 files changed, 1206 insertions(+), 1121 deletions(-) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index ee9aff895..c1134d111 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1119,7 +1119,9 @@ - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml - description: Optimizes performance by untracking ranges and turning off screen painting. + description: >- + Optimizes performance by untracking ranges, turning off screen painting, and + switching the calculation mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml group: Scenarios diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 65e1407c4..cb648e492 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1119,7 +1119,9 @@ - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml - description: Optimizes performance by untracking ranges and turning off screen painting. + description: >- + Optimizes performance by untracking ranges, turning off screen painting, and + switching the calculation mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml group: Scenarios diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index bb59e688d..345393feb 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 and turning off screen painting. +description: 'Optimizes performance by untracking ranges, turning off screen painting, and switching the calculation mode.' host: EXCEL api_set: ExcelApi: '1.9' @@ -11,75 +11,132 @@ script: $("#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)); + + const ROW_COUNT = 500; + const COLUMN_COUNT = 20; let untrack = false; let pauseScreenPainting = false; async function refreshData() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const rowCount = 500; - const columnCount = 20; - - const startTime = Date.now(); - console.log("Starting..."); - - if (pauseScreenPainting) { - // Note: Don't call `suspendScreenUpdatingUntilNextSync` repeatedly (such as in a loop). - // Repeated calls will cause the Excel window to flicker. - context.application.suspendScreenUpdatingUntilNextSync(); - } + await Excel.run(async (context) => { + // Recreate the data in the worksheet with random data. + const sheet = context.workbook.worksheets.getActiveWorksheet(); - for (let i = 0; i < rowCount; i++) { - for (let j = 0; j < columnCount; j++) { - let cell = sheet.getCell(i, j); - cell.values = [[i * j * Math.random()]]; - if (untrack) { - cell.untrack(); - } - } + const startTime = Date.now(); + console.log("Starting..."); + + // If other parts of the sample have toggled screen painting off, this will stop screen updating until context.sync is called. + if (pauseScreenPainting) { + context.application.suspendScreenUpdatingUntilNextSync(); + } + + for (let i = 1; i < ROW_COUNT; i++) { + for (let j = 1; j < COLUMN_COUNT; j++) { + let cell = sheet.getCell(i, j); + cell.values = [[i * j * Math.random()]]; + + // If other parts of the sample have toggled tracking off, we will avoid tracking this range and having to manage the proxy objects. + // For more information, see https://docs.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects + if (untrack) { + cell.untrack(); } + } + } - await context.sync(); + await context.sync(); - console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); - }); + console.log(`Ending. Adding ${ROW_COUNT * COLUMN_COUNT} cells took ${Date.now() - startTime} milliseconds`); + }); } function toggleScreenPainting() { - pauseScreenPainting = !pauseScreenPainting; - console.log(`pauseScreenPainting is ${pauseScreenPainting}`); + pauseScreenPainting = !pauseScreenPainting; + if (pauseScreenPainting) { + console.log("Screen updating will be paused when you click Refresh Data."); + } else { + console.log("Screen updating will happen as normal."); + } } function toggleTracking() { - untrack = !untrack; - console.log(`untrack is ${untrack}`); + untrack = !untrack; + if (untrack) { + console.log("Proxy range objects will not be tracked when you click Refresh Data."); + } else { + console.log("Proxy range objects will be tracked as normal."); + } + } + + async function toggleCalculationMode() { + await Excel.run(async (context) => { + context.application.load("calculationMode"); + await context.sync(); + + let calculationMode = context.application.calculationMode; + if (calculationMode === Excel.CalculationMode.automatic) { + context.application.calculationMode = Excel.CalculationMode.manual; + console.log(`Calculation mode is now ${Excel.CalculationMode.manual}`); + } else { + context.application.calculationMode = Excel.CalculationMode.automatic; + console.log(`Calculation mode is now ${Excel.CalculationMode.automatic}`); + } + }); + } + + async function recalculate() { + await Excel.run(async (context) => { + context.application.calculate(Excel.CalculationType.full); + }); } async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); - - sheet.activate(); - await context.sync(); + await Excel.run(async (context) => { + // Create a sample worksheet. + const sheet = await OfficeHelpers.ExcelUtilities.forceCreateSheet(context.workbook, "Sample"); + sheet.activate(); + sheet.getCell(0, 0).values = [["Row Total"]]; + + // Add SUM functions for each row to the first column. + let rangeAddressesToUse = []; + for (let row = 1; row < ROW_COUNT; row++) { + let cell = sheet.getCell(row, 0); + let sumRange = cell.getResizedRange(0, COLUMN_COUNT - 1).getOffsetRange(0, 1); + sumRange.load("address"); + + // Store the range objects to avoid calling context.sync in the loop. + rangeAddressesToUse.push(sumRange); + } + + await context.sync(); + rangeAddressesToUse.forEach((value, index) => { + let cell = sheet.getCell(index + 1, 0); + cell.formulas = [[`=SUM(${value.address.substring(value.address.indexOf("!") + 1)})`]]; }); + + // Add a lot of sample data. + refreshData(); + 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); - } + try { + await callback(); + } catch (error) { + OfficeHelpers.UI.notify(error); + OfficeHelpers.Utilities.log(error); + } } language: typescript template: content: |-
-

This sample shows some performance optimizations.

+

This sample shows some performance optimizations. Toggle the various performance options, then refresh or + recalculate to see the effects.

@@ -89,16 +146,28 @@ template:
+
+

Performance settings

+ +

+ +

+ +

Try it out

-

- +

+

language: html @@ -125,5 +194,8 @@ libraries: | core-js@2.4.1/client/core.min.js @types/core-js + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.min.js + @microsoft/office-js-helpers@0.7.4/dist/office.helpers.d.ts + 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 61d28b08e25bc80bf2e7ebc2ab937563843e9c49..4d7c9b962d57acc1a07688791c65ed974103fd79 100644 GIT binary patch delta 16609 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 delta 16528 zcmZ9z1z6osvo5@GcXudO+})+PySr;~XX8?wjXM-~cXudK+@ZL$aS9Z;eCPhpIp@Dg zp2%d9ESbFTWM!sx6ynbaM12-q(+VO7BycQ~bpZtm0APay0MGycfVTsSm$R$AnX|J! zv$vx|wWgu+J}-8FvF(S%!4tYb%K~>%Y*vC@QUnH}j<+O@OZhiU>3E5l-~XO^JhLH( zY&6)2xIF#q0{mxsR<2Id9o7Am#h=t#kR+8@Zzc81)mqVz?!ga}`4n|L-Aq0;K)nXh z*&=DE zNf^Gg*pOw6Cwzl2tb}GNqh#riLX4WVU>j98sQcHJix-Ru z5ji`Q+8r!)^Z3xkeZ{julxV>KBm15ti!J}5hK|ICv5s`@T_o)%EM#f%2kwnDYhO!r_A3((qLL7nn*0x5brBOOx(mn#%0HWje)Dm456`7sYcZ^$8 z6bFRtwdh2jUv|Mp^I;8qze zZ`{&&9u^!5uI3*8>RcHFr$yg1dB1fCiAg5gRXzq!UL>*f@KOOFZAXc zaXZ`hAN1#k3gO^KcuTP|ohkK6qn)xE+YY?>aDfvg!N5&eskH1kS~sva5*)PrXQ+Vy zF3j-^2?FakB4ks0n?ZGaVIWexpp}&jNUNc7kZa_$uF`JQ3VfKr;zioD8<;NGtpmt( zxj1YrZTqrn2@DCVgBfcZ|N0%p&p17RX^etj^oaR9ys!mHwp5#bGj9M31e z;4ip7k^w*v(AWt07;n9z7yv*A=#`%gNYsJRTSgBqn5W~L^3Bb!QJj3lrPghwZ!Ez) z-Li20jV!4oNc{a+8uN|QCrwbd*U2P;s*_E_3G=rNCt=(>S?}|yk72IhdMT6P+vEL% z*G_)kD!jH5$bCfrK3Vk9v8u*!2mN4=TBzRTm`OnC?RF;vw;cfJ7HeDH`2F#fol zEu#%Ed|%#h6S-d@GtTezTSxtnzDF zeoc<5YBhWfh!={C+NKDW#>-7cXsaY?p5i1UUo%g=T|d2g`U-Kag$#a4)b zH)d)+I%=K7G+qJ+=Dewa5yB6e+D`O-8=}XYhPE5VlTIaf%wE}-sPXZ2u6IGCZ|`n2 ze4#&nag+O|K%u83G5(f73_%Yag@?L(^eHf4i4ND9=(I}K`wiJUiX>ksBH9LdtjyXm zFmOPO-1_YWR&07Ljnun~%}1OLVJ2CD?PsAOyECZ{Uj;Ax-+3-$;OY-5ua^-n<27`; zSgVDfu{(=PT3ulnD+dkEM6WuXMuJFnQTedG1^#3XQ2X{xF4falZTNKx+Tu*k2Ksi~ z6khi5MM7XAM(_y&vOe=vlWWfGqi%O;(0-$X-sts2%U14mFdFYwLHEdz2WzHeTt&aT z&WkK5>-NvD*m`w}Kn9x;rP|En(vUiIjKaRvhTslhQDb|V`EGB zJ!}sp-hG(kkBHHd57g^=%F)+UA3%=DZ;H__qcewgogZljp?^nSC1%Q2Hf=+0uh)E@&yey9I0QsE~UCL z8s$peLeP)|`+rJb;71vGuF(gQBYfTE^TqC43z7yAf8d8*uT{RRX&fYy`B+F+coPlT zy;-6(Nmq!Fk*kLd9s4uMScm!=_!B75CYHsk9Yb)=)3^T%0Zemz>0-ya2yM~W!Xo_# zuWDb}_)ec;1k_!aqBp&}V-3tH&_rzE(K1S+3GNoSE2)q|9Ery06IG7h#g%vL`O0&X z^tb;-C~=i(^V^yeeN)^@Tx;@*qM{TC(*`{lcJt^)QvH1+=InA!lPjXPf^?T1oKRoMCkYy+un649Q2A`>}X6vgvDj}2^k0{znsNUUNbpBKtt~F z5M`nHM6U?85ck+4*3=LyRv&6OI)@0pw4vS#i9oK2cgc60U2N-WPLWH9ZIG%M1B53i zK#Uol0N$U%zyI9~)FdV>aCor$^KG*Z?C53cWEZU<)s0J2RS$x38&C; zO3>^48lASSs2G=CZj%!SY{v9DzGKmO6M6m&+F*; zT%YKkN;#_q3vj-cMvq4MtpC;c;;u8c4bjOzqs@(%gbJ~n6~7x?6|MwF%?m4Cx6CT9 z<{p<%4r^1RIsjOUz>?MQ@+2yMzulOl;{GvBQz)X}`TmwxR6$c*$lSFi{1uoszHn^X ztRIcl1P#j6Xg)z;h*l4|kF4A*7i6@D7w~J3ZWE1T4`WxIUc5St{?WtJV;tG8qWWqX zCuqx4=GlS3F+#W;YK5+}QGngI!jJxI$UDvcm7K~a$ADKg1mQ8BC2eC!ri#)gMJmXO z>w+_IH!qB3Lk;C4W;L-N*aIv?S^U;|2NLhXYE5W0s2#p>a`|SBzFs#b_>tSNZXz2o zn7r39*qs1hvK|hCU-3|Y)M7U?iOR1qMZo^$Ggu?ga1bO{i^Z2%6tCE&)fx=}y$=~e zz>7Vrm{KWDsDXg+XzXM|$LQ;vdbocFz?<;dd31|ho^RCJma`|t+5$@c#1kjKh&fKR zhhd#g4jKJMDIJu?Yns%o8T%t`I`yq5ToPfN(UR-;t0@*Ue!Lvm(qcTQvc|cfxpKlmG~crq)(trzFv7GcSP5id04&IOY!m&&b`&41I+Y zbq5mtz}!bdT)3(KCarIVn7l}rniCLmubtA5x6Tmxk6;Fir4DHD?h)Zl9XT7H6QnZr z5O}1V69z?(n%L8ObHn?hCZIm4L%~Mur&9_xC@nLx$_N2fWYAuTVy!bE2uojE&G~ZA z0l;GSl;Dypy-})Ik_0)tL_d6wDSyZo;*=m3#971!`Ckx})K)YR__JL@lly+*BNGZ(?V*}7S}zG-37b+y9l#qnR#^}#o3K!H zp25eL!nGb_ABE6p#NM^fK^G8E-FL`UxB`>S&X?N&VtPi{Vr9#I!NLFQ$FLncwu<(WPviYr{)dT*q?ENN zYl*-jw*in;0ebqxrA%kr%bzURmT?b=v$-7TCL2B z656JE#L(<&_YR+{ydX!BM2w#p64Hd%S}=YD8Y_V&-JBLVd{F^3p)(`J$7!B*-LPVCVF85W?trQjVMy;~r9Ziwwm8lUVz31E z&Cmwfy!U;~RlrlxoSMvr2XuznTp47i>61Rbfh`^W>k(i@ht$M=A zg7Gt4>--grWn_q#&m+xZewb%k!$VDL!7`5bI~Q1*&KGQTiTMT6@KrWJJ~EMEu55$UL?l?Bn+uDa@7}&Mi?+vMZIeF zuWjxkozz&|s8Fs^+}fA_$^|KYERo;O>kd4k^?wyDuR)YOGMzS@`B|ia!=gf6EhRp} zpY~YTM?)fAUJ^9WVMfc!D=Y^+xUA#Ig&e`&+%l}O+vISCgsa8PC_hD-@)fEav(Ur( zO$c$-?f$sLANp#l*P7KX1JqkNTk9if@VvAL&vf6ij3ncxX#D3qmw<5&gx-tDdIk(j zlM}YKf%v=2lI%sXCx87IB&&fh9(|#s{s&?-ET2f_*$|7hbkCWLnXwm^j<0imtGow4 z|6{S~{=1bGsp(*8zGmsW+-ct$)I2U&v3H)IM%>ITzD}zJQYb)NQ7ki!F&yzoxmx{B zW0DvmtooUT{I+O;_5A?paDn5Uupa1x%&)xwA{7A=@*=<~Lz3HR6HZJL94!O#HH4yuy0@5HbXB^2;bkR{PVQu{8!>MNBu@T5@L_y-H61LE0N zwG>~Las)+@YbGX0PXclYk+_TCN~%^9Dw(3*8G9ELjgce#8&Lw^Lz-m9fI#?us4~53 z8mpD&m?9d2rC0HpOT0|c5@*pX%2O%a+wjiN@-3P>J9`!(uTa1 z_+&GrALT#p_81>-EY+c>a)5G5zc!hXY-9v+e}I|H%jMmk3@Wh z`W%XM0^7pod>+JK5JNhkFwDSbhStyW{*^tbP&@8*?#!frXG1aIYrY;oye(OmS0S*|>K}Lo3p| zqjWU95YdX`Xo1AX7eb?*PA0i`-JCx`#O;Am}fncMEruthY^!c0#d@qW1L7Y=?X1b!7 zflcy7Zu`5NyUHFy>)&qMk|N8{UbMLsc5uNp);8 zd>WBZ1IHx`Gl6}GY!{X1s5oU*#?-65%ItfE)-8fwdX@Y{XZ_*_&r>34*AEu-4w&ZuHwXS6iPej3d)eg${}mdwtGr=C}SXA**A;o{S7N9 z?RMbjpybELf2~ps&*Sf3&NWdHwi!c{n`Ie}6ci6?uDC z?2=q(@1cAE{#ZmS-u~htzHVLIlKZIM7U)%oV}ReCz0gH@=|Q2LVy$cCdNOmj(DuPY zEBQl&WcH@CzpUer`mxXrYz4zJn{%8j%Nr~^*(O!_%@WU~+IN#{v!7GWk?S>JL*iK? zKDT3nH;|$0?LE72s&#-+9>nEB2aPPY}av~i$d{lUogxQ zKUmmDCC1=O+)<-`aYIE?ngSXb3>F+qYyYkI&})(49h@S?iomR}wE#tyx-g0Id{t?> z93zlq>H;V3@2}D%{`~e9j>|w@HqR+`Y7#qoON7u&A&|RRX7fPn7^-5VwUUCMn}Tk( zW^&{N^fewSXT*dz&2uOY*6d=?Go^i#93mTvl@rHI4D!PLAi~IudvoSlp2#rASc;F< z1XJluxAJ#zjwX4ke+R@vYUefWq*bdHW;n2dBY%~!qAtaBM^wuZW;(MbwOl0gyMVeG zkWFEMXzVTb^n^|7=}X-X8#O~%1?Dx66){qkZ|Ux;x2H9~Acv}fkeh;R5x1t<+vvYv z3Bu7AJyYJ?obR`kG|vk};Tz{|rF>IU^sSZF#tJSnwerhWso173hzkwrM6_Xt$d@0oGkts;Kyje@XBH>G{$b38ZW2dOsE!T zJ!v7>#X+)!T9$2XV=u~{&?2X>lVJ;tSmu7!o6b*obXGJa-2n1AHnD6ePn*{yLpV&K z3BBr#=lgmRWesXjIffoM9B8wL96_>ML+>cm`x@{?UMM)F3R#|NV{73QLnbu=@1=ncwlVwW&HM(OLmr6$h?%9=~Sc6;V}ey5PgcT zPn&DoQ53CPDft=#YN0RUG9y|0o}6i#bJbr4+|2}%I5rpt{FYOjdjCr({}OsS4+pD~miF}edY!HHa(Yq!IHc5sU+#C}(VX>5%j-Q*nCKI^7Dr?bzms0jth$(=l11tLh zb9+0WUzzK`6Z3QaFf@{aPKd?;KSG{57WJsf3B{sT*ziB4NxdzGpLMWjr(;fy;?MBn zS)VM78V7b?om-s4(x)ngA2^_Ed^v-}(A)}2+x%t4MjQb~-V>yxy*f1)Q^U;YjrS|h>gkp8ii{2^-Z$~jc znrSFmWwc=O!revp$l&@#Pd#Gt(M{Fnr{O6L2W_WXkCZ2Os}lj|2P zm?Jz#(vDUci%q$`ee@^r6Bl-jP+Ar4BK{VDwVVn?kB zRHNw%rqj4jpz~aD_b%;J%;qbltlpp4kt4nNA(o3qi=KJ+X*e97N?nE?P4QC`;RY_X=czpuizTf@#gJ)z zYF^YMtj{NfmYp)&gQF!WJRme^JVM&!x{0S~nI$V7V1laG5gY#l+<#$dvnd_x=u`hiIRZTqR)7r(0RJW1I&72UC7Pmb%}YxY(*in%i)KCq%klcfh(#u( z8V1o*&a9-0NeM;G{-Td|P9^8bNNAf5mn=|X$tm<~%;hRldVr9d-ZjH9qN|eZ^Ac>A zT(J+H#1pH{J@W@p+(2m32%Yv|V#D1f4Z8>cJoeUwRhG1V=Rl7<$*B-eb=8=vKU8tT zXtZ!mR@M~o`2p)v3;vRtr>qlJB!3V2tVkAzKEoWC#0*;+yP&d0Rm(AM@yQ}BuuigX zz<(YtXfl%bKRmT|(W6zg;}@&is0+DRZ}cvApqd6UFQ!R)>A`%1y?Zz6;P)1zU*QR= z1mkd82NYnwZ7cFUr1H$bE?oT{1V442ui`CG^=lFWztBeC`BB579+_X2{5yu!;Oj=v z2skd_%k&eWFLYuht5dgQ6Fo}#iDg($nfh-qItO_?L9U)?stc>T${m6}zr544(gRZC zHXf@SIX#X1@NfBW|A7A|pd4sRB8d&;IJNBuo9xo1ts~pjY1g%J6A0R`%4K zfufo~5ZZTuCMttRWx!T}nn6E%YE4q*!*gi7 zGE}60l<34t+;unL$*JN1i&Nop-fvN2Dnt}&9lZXRjmt3Tn0P^17Vu=LWQB#z@ ziMd2nql#h&#Y~@m3hQ?J6DsvHQS#1s5s|E0h{C*VD|e5EICwN*s@VUwEHqB4|!iakz33)GQ)O=ZCu{roc9qMbO&C} ze9dQ+<3Eu`IDv(%VIyqiu#7SFTfd>9PO*|Rg~ubL(tZoE zg|heEHqntngx)B1^pc_Hka79};ELs2?lW}@HFBjhgOpjAY9sP%>(`_uqb35nXX7Ok z@1UFY*g~azp)(QWvnEfzW!e;Wcs# zOt4tR6ngJ|OBcQ!OyF^b{9D^dQqgc*Ak=q>ptx)%Mf?`vwVu1%I0&sl2Z!4DL`9!V zbx^p>xtCgW4+!VKfqE38mI?*dm*U9G;08h&pZd64ikk0TmLill23~5su4C-V8VMxo z!&CAeqi&XjkR3JG(0FDmg%B^&*&p+>qtK3fJ&Dl%N^MoQ?XgGC#@*lfE&I-tEK6sz zXt5;E?$ptE(?`K3L~;!G#Fpu@)2AT1l6R88T(~$D?eEO$Z-;9kC#niu_=8$IZXxBa z%Zg=qt6SW5;11Rp3|enjj*Iv{Wxqi5t7?uspU4pLIH;FX`K6TNf?Kv<)+i44`TK0P zRi)Z0tOkuWXV{9A*dD)!kH~pQ&gprkk!vY-D@5r89~R~H=2u*I>*R4o-xf<1XWT9x zg|g%00*q5zK3o3OUBqLcLSL<+qCl2L6opD2H_8FF_1sTrG%g5-g+VxJX367?^%b$U zfcSg4O89%eu0{^W6D4IHtbRczgSe}iVatav){@brN`wBpLPxi}D%=-k$8qrt_ST&9 zB}%XW)fhH@5baO-2Rl(uSE;e;sZUPG)e(yEWe? z$B*-k-Y`xl`qYZI0i~>@od4;DRX^Cme=~>2s$~*Hb1s&A=RuCXfzQn@BA%LPel;xJ zeVaESea132azoPP_eXIW|;%XoCNj>@o8TecskGXD&GlccEM-?uTg{V+dty+f$$0uVa%y1UtQPO$T3kdfV$jJi{q(qOkh`{X z-3={YkdX732Re->8{uw^N;3YEz&I#CY3BgMOFfTr-Z(`sMD`Z!b@-U320x> z!V`Yvyg1}{gcU5^5ar)0cW5!YxPM$3^i~m)jA}j=JD{kFuVryxjVbcYlm3Y4KHo6x zaSJcy3>g(E6DIjl;$TH?BQ&R}s8(d0x8VWvkvC}-i(#)5q89bll7pyyW&e?bPpW*` zzs||aaG(!ZriO1m%wKY;EoTZCsJh8)ke4Qii!{fts|I?(oHmlk-!qOd?)oSKCJtlc zxk8sMbY*VsI47;0JE70GAg+-2)vB(d};r>@$R;3*J%4<6)eavGCr;7q> z%f*}AMD(PNFnk`99f|{d^H7)VGE_|aDUhD;&dJCkIQ?jJ(B9Zw8FtTwa<$Kx#f_5K z!Rihq+1qAG+<$R@f`2HL=*A9#YhTG^5j~pJd!k-L7HxqDe(5rax&Lk&f3&JLViNQ{ z_ZiYc*n2VHMtX4!ELL*^^I)}iX&{HuX6nV35(1vf810Y#_%EKnG z^%~*>d)fBj3Gt$z_K^x0r|Cyn@Pq)~V%C53xy2~8^(GS6C=1^-{K|@Z!xYv1_;+%; zD&5GaEwI)Fspo+!(NaNMA_Ut{&QSw70yw*0sgUbjQrHD-@1?oT7w~&9^PATv0*u|r;oD#VGBdejT)K8FhrPZ_+ypwJpKbwNQ)cZl zp^7e^Gm!z)vD0iHm_0!oQ0dgFdIFwJ-9;wV%LgIY7T>a+9Dv@Q6^p?^h;RnY3c4@+EIbyQX(8^4Yw6H0~>D^KsVc5Cy(V zgVxMy)Czt#JD7S2gB+jNh-+KFZ2d@%>9PGGNfaT&Oyd0sk-ucI3B0F{lLdko#t)i-(8ftg}j5%7;2NlSRn z$F+~mFj;IdpC**rq5~muo3IX_Ss{H}>^4~zT_{F}nz6%nzjRt5kG%6#&-EDVVkPu6 zV=Qj7x^0(9`^<=r97-q0>77y+^IoYnlPv1=NF=!_)0%ut2q-cHHA9^5aE^ivRhklx ziO-*6_b)e1xj1s)DuXwr;Dn|>f+Jou(`e@0%Xa4rIgK?8I)KG7No@*7hJPP^SfRr) zI>_^ADb$-EUk(Eg;{-bb>cn?T2%<0>epRW6aDIr1^-QWHl_zMLYagk)@KB-vYx0-1 zb9COe0YQ*UI8ZEh$(hds;@XXaGWVW+V;)i_UF{_9 z)PE)UbOKk20b<5+vrKAC{F(8|HljNlr~;m*XEM{=uxfZCdYH|)<3e> zfoiar4W#mL{Ih`5i6v#D_tTKuaX?r2f$wCSU=#0{7~x@N&F4}pWMHE`v|(@Rwr2mWmkTdM%Jns& z=rW(R8FU^&>0kbX9*(cHTgZ6=a8wkorH!Lb0HD=zPB1(Xv;B6LE@lS?mGcpzu&@`Z z7x{Rm+JRKPz;;6?XVG0pxY!dD7UlaCT&}RLbJ``UcjvJ+2cXG5#B+;6YTpz~iNi_Z z*ph1jv~Emv?FI7_OtfO^w5J%ljT#?=LOsul&2{v`R6K3zlO)v?4` z)9>5EU%GfykJ+_Elvzwyg*K{MbLashdD{eGdum-bM zV%sbG>v2x>eW2=~^Tnh5uM!Htp{H=%+;Nl4O6F94yENS~qA-^{J*@lA-7^*d`1T-Q z$evXQ-;YP37jnlFC_;m9jC3&;slJ>MhZfco!lE*gK7@~Q{qjwYN;6)e)B3G=RM|5h#z0maI zHfY%|@Gm5~F$?XD2K0R(Pgo?&eB2y*?9e2_aSlX{HY?#w9viAQm=s;XV}_!$*EVJL zCa3iDMNg?VH)IND3Y`#D(@{7WW%v3KE(7}ZrTOa5WL zpK)X<*wc$D2fRLJny&BU>mJrJOpvk=A?CZxPJPe~3-9?BM57!hnf^s4BxlT*y0&N= znfoUYx|;nJ`Kl=m!WRkn=gSVxAEmY}CpbM z4K;nW*dt^7m*$`*xZ8-)$`==29^dP&`UL7{@Ju$`mQC@Ui*_l{+V(yI^64M%0G1tp z=(iWfl|_AE78w!wm{*)|q(PMJ8rMUsSg#N`wxS_hR<{Fpe>L~Ke4X$gUsD*j0ZBV` zg)_22`|;gS98tO#^NEdS_YU{SZ+FM8+CTY-wf^R1Z8`gL(kgU3tAD_xuVt1l$N5@Y zalXg-mBvj?hc#iqfHs%NEJz%7W*IQ;bjLL2wZQzZk{#vc>_cJd>#q1B2pCKc*m;C~ zg=FReqkUvy9)Wi?$Ps&Zy)myMzh9#K1LN|aUq}n&XIwJ{+YU-B!G~O7EgUnVwM)q6_aHGrwa=@i1F*kVd92yP{o`>5?_?n1Bv|;S+ zRLo;YnEL&Z5U@>PTu?c~@RKO!mlR9I>w9opdAAAs5ccs$*VR*w=#@chZRFJrxQv z+*zospJ3&5eBQF=Iw;YLcZ#W&MtW$yZyX1RP}rr2*82w+!-SaVQ@=wa9| z5}dGJ(?-~@CHTuvf)_7)y@;kMeO(`NmO;mE;k^m0fp&cwdHc#8NVzMfjQuxKLi79V z0kVI?-ojeF71^^RbxIe@RpgZ|v~jGTSM8rXtb;mdUZQ1AYoc=3*~q-O*FryECuc6K zkz9uMV`z_gH-pnn?R8Q7diQ^Y3b~W16CGumus;J1?FoC__#aLe)#Qj_)wax^kgcY&BBMA0wtz+29$vk12c(Lzg4~#`1i+ehsEFm0QulOTw~irYE!_RL*q+`APowX`_(g_(|+J$95I&m zVy)wGBVE!G#X|1kWN8=XccZ?v*I|E?-HT%2NxPem@^mOP?`#&R&DM6qG<3~xwKPj` zs(WdB<9_BdK1u4enpToYTkC+{^nwe}wcvm;4)SM)9(hf-;G3m>b~w}?oIl4?Etr%M zD8wty9-{rq!gDVxd_cy@lY$u*tTwj8wuffmxj>S>DCSxFJ4xd=qd@Ens(s4h0W37o z$n=UsA22F1R`R~p5dx$?`Nwg#AhG{h-By=WREqVynN_r^CX$o;k36+laV%ZW; z^T<@A+{&0BH=w&SKZA!G%bJJ>55j>%i570B$bQgY{#vQb~~SJZoTdeL0bC>Q|iUL7j_ zGhQ+ef#u9TGkh5$E3CKL`5)h@*^<5IK*2Uz*~W8y+RPGYCfZ{&C=5?`^83LNuJ`0NZU^v@9~s8`rdE|l3zd@os6 zy22|DNp+p<-*#;Rq1mslz?`28JsbrqyrI5L7? zp$yC!BPjA7RQlm#SBywyWl<^>zv2~Ms2dRny5G<$KR$@q$?BvI#4`?)&wT|}8VDOg zl2LVPt6z9bZV-iLHP4nr#;EN^9uVI%^?GQ~vz7Qa%Elc8v~505iPx$2g=IS%?}N+!_pk8}GSD$| zDUg1>m^SS*At(t20Qg+~lMv+Q?&DzT_Mdd13vKy?1y=N4${VsTJ54^#bdF2dj%1(l zv*PRD_ReUO>}$x9_L=FTK4w;B*RgT+IvECnjWCr3cl_^~1$+!$js(#))#%Ky4W7p- zzN8Z1oZ|;{%WqP+%Ef()$i$|S5>Nvctt_Oo(3EVmxpq-V3IHf3@g19)NAt8xi3VMK zsFA+>k!QvkBTTcqOb!3S%MgcYZFKSqm0(V<632RU%12II_3F4=nvAEjfMclvX2f;% z=I_--s<{3Eu|$8ezgQ6xjF>CeB2|4)E09wvm&U%L9dte+SVs4pc{NVt!z%KB@0L#kqh-1H>oe=`#ni^w)ykbNHU=|`r5 zxGe=~uvZYHRD_P}M)&6|3LIt3r50J~$Macs=@AnKPkS~cs7Li+_(n)iAGrwF_54sx z{`+XnnddaM&N%SZ(t#`_?*l+*LMK{DnV@aQ-&DURbINKyVs zAuj7P8e@$4gTsA>%B;x}^q`%=QvwK2#T<1~MDU+{TC%i~N)<5sg;nd^h(ADK%HJIj zKIvd|E?0?HI@oE$Awq?chyK4Q`E0Zxs>MCU=fnVPsa{uudF^tcz z@=?yvWs{|SPK`DX zC5_Vwz4`#S+-2M2pH|y#CFV0*_&q!*{roTu>uRMH-o;4}995`4O#wp4_PqU<-~YNu zWmN4LSefjhU`Pg|aNtxA0&AQ&6%@#u*EbC=|85;4$x%}BZL#)q9|Ke*~IoTTh~d&SYmcc0J+^?g)lpQ+O&TE z`R?DULq#caf4sy0bWFRMcj-Z<1S$|=CfIDy+;@<8e+LYey?~8}r zQS=S`^9bjCf(qBeIj&elZh-vKWSJsKay1v;=CFel^3v-xE^V&JXR6WMVaKtUDxPfe zOhntwjkUeow|Fn`Ux`UgS&A+Ys7FTG8MmKrtqTMIKnegkn2-Z4ev2s$v7*EL7Q*zZ zw^AndQdQ9?%SMbABJTH~iC$X8@`)(z5sKGP2`+Iw{dnrxFy1Sk$>39IG^r%SrcpMO z2@OwpS}DU*VPy7jDhk7`9j|vLBlAR>+>F{^xWH_rXN%5$m>>LlC~N;nDK(~vER3bj zl3G??0S=Y!`Geue5@LI4`3CyQ(^ApG_WPY#h2&Y?MTX*lH5T%Wn3s46`@pWSJpK2C z4sOOJN4Y{w__Wt}fcEIS)$~UJr#ZcV@8leUc1mRSqv$(_S#nWT8~^@+g=K>2(fm?a zZNWA_ROeQzsn^Ht)6^y2|80pl79d;`qdpcC2mu-y;cA+WGvTv2NSeHKC?E(Foi|vK zBfwCPWXM}Ye3vT7!PRCm0{8W1paxwmpswF~92tv|P;t2vYA%cK_=#Ehu&e41$dI@e zq*pn?t6pP&9GGN;mK!!v>iD2NDd2lCHy_RT0RX8LUMD*3YfZ7_hPd_jfy@3}nxh%? zG9MQ61zx1Kxn6g48KbnrmM|!>^1@yjS_wA3THhDr1^)G5w0zI8;eNdU`3V7gU{u*6 z+RRZ@L*d?l4&GNY{Y?@^Z|Yto+|`H}G=3IEz9VrU69z z>~>2Fm2mQGcqi}IkSyPBHpr1pQcn~;Y0#li8|etl^Aj82aqc);0bz2DCiL;U1_B9N zcs;~0#5qWCp$K6_$58^(q}SF>25gzaKgKMzq^U`7azyB?ZT%E5{W5sXs zeiJe99vy3rX^Z&dQF#2V#ZfUL>*G)JwYu2W9di?z!g39QU%4?Cm}rPXP;sR;eI@3$ z@*qEVDaF6b{w*0A2gG28-n6QL1p!S->h*uB$=d#<0VyNOB@boC&1w4twySm_pnF4C9 zk9snXH_##rpL*R&!iiUeJA-@2#-v)!{PkXqN$nE<=5aeX=mJ@!dmj@FUdgzfcQy$h zSKVf}Ngvk1v6)(81=;av3OnP`36B=EOZ~BL6?u?CbTfKeE>01`{peBy{lh2u7+Ml{ zEaXt?JC9g42dr$Aq~BPkZo&@zB%0QR~cIyiW6856s5 zZT=#~MM3`n;sKpFfrWz~!#{8ttK^$KmvPl=9cv^#OL;QlU1}`z*z1Fs9-P`%r!Ag*PH!>!3~~ZtawZP?fi5*1o22 zK5WeRG~ZO!ZS$+{ua`TEnZaZ2!|ZLlSK#0V8k-T9AEQW5BlcK?i~Md z^7n68y;2e^w&;_$oP`)sbQ2I1X$-P=kl3ApB4w=n`%hT?)N&j{XG4&)1F`E;)tG-iF7X?;rfe zdX;$4;@o`@|H&r>F{;Kxf2*{%Y65G1g#gMAv0{hszVh8QTl`qmr*BxTcs+y3f zhb+Z~5R>#5eRBy&b;-RQ?QgQ>#Mcf+5tLm^IVX0^U7({#a~5MK@{PRR>tsvjGX`d% z%*6tmP!f56Ttz{TLA%Aei&jg2;r{|dmgH-FMoP{bOi1UI1RW$~N(gCB3eq(d z09}|6Lb{TH2$ZQoOs43>{}UDs0O0@6rJsATIiY=>PAMIJ;W@2hLUGVPOBGgZVk{LjwTEhW|PGKT%ka AUH||9 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 8c69b2834..a9c44e650 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -32,32 +32,41 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const rowCount = 500; - const columnCount = 20; + // Recreate the data in the worksheet with random data. + const sheet = context.workbook.worksheets.getActiveWorksheet(); - const startTime = Date.now(); - console.log("Starting..."); + const startTime = Date.now(); + console.log("Starting..."); - if (pauseScreenPainting) { - // Note: Don't call `suspendScreenUpdatingUntilNextSync` repeatedly (such as in a loop). - // Repeated calls will cause the Excel window to flicker. - context.application.suspendScreenUpdatingUntilNextSync(); - } + // If other parts of the sample have toggled screen painting off, this will stop screen updating until context.sync is called. + if (pauseScreenPainting) { + context.application.suspendScreenUpdatingUntilNextSync(); + } - for (let i = 0; i < rowCount; i++) { - for (let j = 0; j < columnCount; j++) { - let cell = sheet.getCell(i, j); - cell.values = [[i * j * Math.random()]]; - if (untrack) { - cell.untrack(); - } - } + for (let i = 1; i < ROW_COUNT; i++) { + for (let j = 1; j < COLUMN_COUNT; j++) { + let cell = sheet.getCell(i, j); + cell.values = [[i * j * Math.random()]]; + + // If other parts of the sample have toggled tracking off, we will avoid tracking this range and having to manage the proxy objects. + // For more information, see https://docs.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects + if (untrack) { + cell.untrack(); + } } + } - await context.sync(); + await context.sync(); + + console.log(`Ending. Adding ${ROW_COUNT * COLUMN_COUNT} cells took ${Date.now() - startTime} milliseconds`); + }); +'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 - console.log(`Ending. Adding ${rowCount * columnCount} cells took ${Date.now() - startTime} milliseconds`); + await Excel.run(async (context) => { + context.application.calculate(Excel.CalculationType.full); }); 'Excel.AutoFilter#apply:member(1)': - >- @@ -832,6 +841,80 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + + // 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(); + + // 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 + + 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#delete:member(1)': - >- // Link to full sample: @@ -852,30 +935,24 @@ await context.sync(); }); -'Excel.ChartSeries#getDimensionValues: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-bubble-chart.yaml + 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"); - // 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); + let seriesCollection = sheet.charts.getItemAt(0); + let rangeSelection = sheet.getRange("C2:C7"); + let xRangeSelection = sheet.getRange("A1:A7"); - // 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); + // Add a series. + let newSeries = seriesCollection.series.add("Qtr2"); + newSeries.setValues(rangeSelection); + newSeries.setXAxisValues(xRangeSelection); await context.sync(); - - // Log the information. - console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); 'Excel.ChartSeries#markerBackgroundColor:member': - >- @@ -1005,74 +1082,6 @@ await context.sync(); }); -'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 - - 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.ChartTitle#getSubstring:member(1)': - >- // Link to full sample: @@ -2089,38 +2098,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) => { - $("#display-xml").text(""); - 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<"); - - $("#display-xml").text(`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)': @@ -2147,7 +2124,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 @@ -2211,6 +2188,38 @@ await context.sync(); } }); +'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 + + await Excel.run(async (context) => { + $("#display-xml").text(""); + 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<"); + + $("#display-xml").text(`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.CustomXmlPartScopedCollection#getOnlyItem:member(1)': - >- // Link to full sample: @@ -2257,24 +2266,10 @@ await context.sync(); }); -'Excel.DataPivotHierarchy#name:member': +'Excel.DataPivotHierarchy#showAs: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.DataPivotHierarchy#showAs:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-calculations.yaml + 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"); @@ -2297,6 +2292,20 @@ 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: @@ -2992,6 +3001,47 @@ 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(); + }); + - >- + // 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: @@ -3058,47 +3108,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(); - }); - - >- - // 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: @@ -3263,26 +3272,6 @@ await context.sync(); }); -'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 - - 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(); - - // 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#layout:member': - >- // Link to full sample: @@ -3304,6 +3293,26 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); +'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 + + 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(); + + // 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.PivotTableCollection#add:member(1)': - >- // Link to full sample: @@ -3344,110 +3353,163 @@ await context.sync(); }); -'Excel.Range#autoFill: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-auto-fill.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const sumCell = sheet.getRange("P4"); + // Direct dependents are cells that contain formulas that refer to other cells. + let range = context.workbook.getActiveCell(); + let directDependents = range.getDirectDependents(); + range.load("address"); + directDependents.areas.load("address"); + await context.sync(); - // Copy everything. The formulas will be contextually updated based on their new locations. - sumCell.autoFill("P4:P7", Excel.AutoFillType.fillCopy); - sumCell.format.autofitColumns(); + console.log(`Direct dependent cells of ${range.address}:`); + + // Use the direct dependents API to loop through direct dependents of the active cell. + for (let i = 0; i < directDependents.areas.items.length; i++) { + // Highlight and print the address of each dependent cell. + directDependents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directDependents.areas.items[i].address}`); + } await context.sync(); }); -'Excel.Range#copyFrom:member(1)': +'Excel.Range#sort:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.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) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - // Place a label in front of the copied data. - sheet.getRange("F2").values = [["Copied Formula"]]; + async function sortTopToBottom(criteria: string) { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("A1:E5"); - // 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#find:member(1)': + // Find the column header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("columnIndex"); + await context.sync(); + + 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-find.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 table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); + // Retrieve the worksheet and the table in that worksheet. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const tableRange = sheet.getRange("B2:E6"); - // NOTE: If no match is found, an ItemNotFound error - // is thrown when Range.find is evaluated. - const foundRange = searchRange.find($("#searchText").text(), { - completeMatch: isCompleteMatchToggle, - matchCase: isMatchCaseToggle, - searchDirection: searchDirectionToggle - }); - - foundRange.load("address"); - await context.sync(); + // 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(); + // 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}`); - console.log(foundRange.address); + await context.sync(); }); -'Excel.Range#findOrNullObject: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-find.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 table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); - const foundRange = searchRange.findOrNullObject($("#searchText").text(), { - 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); - } + // 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#getCellProperties:member(1)': +'Excel.Range#group: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/outline.yaml - await Excel.run(async (context) => { - const cell = context.workbook.getActiveCell(); + 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); - // 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 - }); + // 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#ungroup:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - // Sync to get the data from the workbook. + 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(); - 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#getPivotTables:member(1)': + - >- + // 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(); + + // Get all the PivotTables that intersect with this range. + const partiallyContainedPivotTables = activeRange.getPivotTables(); + // Get all the PivotTables that are completely contained within this range. + const fullyContainedPivotTables = activeRange.getPivotTables(true); + + partiallyContainedPivotTables.load("name"); + 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}`); + }); }); 'Excel.Range#getDirectPrecedents:member(1)': - >- @@ -3496,29 +3558,239 @@ } await context.sync(); }); -'Excel.Range#getDirectDependents: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-direct-dependents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml await Excel.run(async (context) => { - // Direct dependents are cells that contain formulas that refer to other cells. - let range = context.workbook.getActiveCell(); - let directDependents = range.getDirectDependents(); - range.load("address"); - directDependents.areas.load("address"); - await context.sync(); - - console.log(`Direct dependent cells of ${range.address}:`); + + 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"); - // Use the direct dependents API to loop through direct dependents of the active cell. - for (let i = 0; i < directDependents.areas.items.length; i++) { - // Highlight and print the address of each dependent cell. - directDependents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directDependents.areas.items[i].address}`); - } + // 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#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 foundRange = searchRange.find($("#searchText").text(), { + 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 foundRange = searchRange.findOrNullObject($("#searchText").text(), { + 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#getExtendedRange:member(1)': - >- // Link to full sample: @@ -3544,118 +3816,6 @@ await context.sync(); }); -'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 - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - // 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(); - - // Asian and European teams have separate contests. - const asianSalesRange = sheet.getRange("A2:E4"); - const europeanSalesRange = sheet.getRange("A5:E7"); - - // 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(); - - if (asianContestRange.isNullObject) { - // See the declaration of this method for how to - // test this code path. - reportMissingData("Asian"); - } else { - createContinentChart( - sheet, - "Asian", - asianContestRange, - "A9", - "F24" - ); - } - - if (europeanContestRange.isNullObject) { - // See the declaration of this method for how to - // test this code path. - reportMissingData("European"); - } else { - createContinentChart( - sheet, - "European", - europeanContestRange, - "A25", - "F40" - ); - } - - 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-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(); - - // 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#getPivotTables:member(1)': - - >- - // 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(); - - // Get all the PivotTables that intersect with this range. - const partiallyContainedPivotTables = activeRange.getPivotTables(); - // Get all the PivotTables that are completely contained within this range. - const fullyContainedPivotTables = activeRange.getPivotTables(true); - - partiallyContainedPivotTables.load("name"); - 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}`); - }); - }); 'Excel.Range#getRangeEdge:member(1)': - >- // Link to full sample: @@ -3681,45 +3841,36 @@ 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 @@ -3778,138 +3929,133 @@ await context.sync(); }); -'Excel.Range#getUsedRangeOrNullObject:member(1)': +'Excel.Range#getUsedRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/used-range.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.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 + // 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(); - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Orders"); + // Asian and European teams have separate contests. + const asianSalesRange = sheet.getRange("A2:E4"); + const europeanSalesRange = sheet.getRange("A5:E7"); - let productsRange = sheet.getRange("A3:A5"); - productsRange.load("values"); + // 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(); - // 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]; + if (asianContestRange.isNullObject) { + // See the declaration of this method for how to + // test this code path. + reportMissingData("Asian"); + } else { + createContinentChart( + sheet, + "Asian", + asianContestRange, + "A9", + "F24" + ); + } - let hyperlink = { - textToDisplay: cellText, - screenTip: "Search Bing for '" + cellText + "'", - address: "https://www.bing.com/?q=" + cellText - } - cellRange.hyperlink = hyperlink; + if (europeanContestRange.isNullObject) { + // See the declaration of this method for how to + // test this code path. + reportMissingData("European"); + } else { + createContinentChart( + sheet, + "European", + europeanContestRange, + "A25", + "F40" + ); } await context.sync(); }); -'Excel.Range#merge: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-merged-ranges.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.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); + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:D11"); - // Format the merged range. - chartTitle.format.horizontalAlignment = "Center"; + const deleteResult = range.removeDuplicates([0],true); + deleteResult.load(); + await context.sync(); - 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#moveTo:member(1)': +'Excel.Range#style:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/style.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:"]]; + let worksheet = context.workbook.worksheets.getItem("Sample"); + let range = worksheet.getRange("A1:E1"); + + // Apply built-in style. + // Styles are in the Home tab ribbon. + range.style = Excel.BuiltInStyle.neutral; + range.format.horizontalAlignment = "Right"; - // Move the range from A1:E1 to G12:K12. - sheet.getRange("A1:E1").moveTo("G12"); await context.sync(); }); -'Excel.Range#removeDuplicates:member(1)': +'Excel.Range#getUsedRangeOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-remove-duplicates.yaml + 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 range = sheet.getRange("B2:D11"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); - const deleteResult = range.removeDuplicates([0],true); - deleteResult.load(); + // 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(); - console.log(deleteResult.removed + " entries with duplicate names removed."); - console.log(deleteResult.uniqueRemaining + " entries with unique names remain in the range."); + 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#set:member(1)': - >- @@ -3952,143 +4098,6 @@ targetRange.format.autofitColumns(); await context.sync(); }); -'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#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 - - async function sortTopToBottom(criteria: string) { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("A1:E5"); - - // Find the column header that provides the sort criteria. - const header = range.find(criteria, {}); - header.load("columnIndex"); - await context.sync(); - - range.sort.apply( - [ - { - key: header.columnIndex, - sortOn: Excel.SortOn.value - } - ], - false /*matchCase*/, - true /*hasHeaders*/, - Excel.SortOrientation.rows - ); - await context.sync(); - }); - } -'Excel.Range#style: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 worksheet = context.workbook.worksheets.getItem("Sample"); - let range = worksheet.getRange("A1:E1"); - - // Apply built-in style. - // Styles are in the Home tab ribbon. - range.style = Excel.BuiltInStyle.neutral; - range.format.horizontalAlignment = "Right"; - - await context.sync(); - }); -'Excel.Range#ungroup: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(); - - // 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.RangeAreas#format:member': - >- // Link to full sample: @@ -4381,6 +4390,18 @@ 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); + + await context.sync(); + console.log("Settings changed handler registered."); + }); 'Excel.SettingCollection#getItemOrNullObject:member(1)': - >- // Link to full sample: @@ -4392,27 +4413,15 @@ needsReview.delete(); needsReview = settings.getItemOrNullObject("NeedsReview"); - await context.sync(); - - if (needsReview.isNullObject) { - console.log("The setting has been deleted"); - } else { - console.log("The setting was not deleted"); - } - - 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 context.sync(); - await Excel.run(async (context) => { - const settings = context.workbook.settings; - settings.onSettingsChanged.add(onChangedSetting); + if (needsReview.isNullObject) { + console.log("The setting has been deleted"); + } else { + console.log("The setting was not deleted"); + } await context.sync(); - console.log("Settings changed handler registered."); }); 'Excel.Shape#delete:member(1)': - >- @@ -4447,20 +4456,21 @@ 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': - >- @@ -4476,16 +4486,20 @@ 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)': - >- @@ -4498,17 +4512,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: @@ -4527,32 +4530,38 @@ 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 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)': @@ -5044,82 +5053,58 @@ textbox.textFrame.deleteText(); 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); - }); -'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 + 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"; - await Excel.run(async (context) => { + let docProperties = context.workbook.properties; - let myWorkbook = context.workbook; - let activeCell = myWorkbook.getActiveCell(); - activeCell.load("address"); + // 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("The active cell is " + activeCell.address); + + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#getSelectedRanges:member(1)': +'Excel.Workbook#onActivated:member': - >- // 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"; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml - await context.sync(); - }) -'Excel.Workbook#insertWorksheetsFromBase64:member(1)': + 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/50-workbook/workbook-insert-external-worksheets.yaml - - // 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,"); - externalWorkbook = reader.result.toString().substr(startIndex + 7); - }; - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml - // Read the file as a data URL so that we can parse the base64-encoded - string. + await Excel.run(async (context) => { + const workbook = context.workbook; - 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 + // Register the workbook activated event handler. + workbook.onActivated.add(workbookActivated); - await Excel.run(async (context) => { - // Retrieve the source workbook. - const workbook = context.workbook; - - // Set up the insert options. - var 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(); + await context.sync(); + console.log("Added event handler for workbook activated."); }); 'Excel.Workbook#pivotTables:member': - >- @@ -5138,91 +5123,115 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Workbook#properties:member': +'Excel.Workbook#getSelectedRanges:member(1)': - >- // 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/42-range/range-areas.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; + const selectedRanges = context.workbook.getSelectedRanges(); + selectedRanges.format.fill.color = "lightblue"; - // 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(); + }) +'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"); + + // 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("Set the following document properties: title, subject, keywords, comments, category, manager, company."); + console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Workbook#save: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-save-and-close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-get-active-cell.yaml await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); + + let myWorkbook = context.workbook; + let activeCell = myWorkbook.getActiveCell(); + activeCell.load("address"); + + await context.sync(); + + console.log("The active cell is " + activeCell.address); }); -'Excel.Workbook#styles:member': +'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 + + // 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,"); + externalWorkbook = 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]); - >- // 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-insert-external-worksheets.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"); + // Retrieve the source workbook. + const workbook = context.workbook; - // The "Diagonal Orientation Style" properties. - newStyle.textOrientation = 38; - newStyle.autoIndent = true; - newStyle.includeProtection = true; - newStyle.shrinkToFit = true; - newStyle.locked = false; + // Set up the insert options. + var 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("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Workbook#onActivated:member': +'Excel.Workbook#close:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.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."); - }); - } + await Excel.run(async (context) => { + context.workbook.close(Excel.CloseBehavior.save); + }); +'Excel.Workbook#save:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-workbook-activated.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.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."); + context.workbook.save(Excel.SaveBehavior.save); }); 'Excel.WorkbookProtection#protect:member(1)': - >- @@ -5302,45 +5311,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 - - await Excel.run(async (context) => { - // This method adds a percentage AutoFilter to the active worksheet - // and applies the filter to a column of the used range. - - // 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: @@ -5358,118 +5328,44 @@ 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. @@ -5517,6 +5413,18 @@ ); }); } +'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: @@ -5536,46 +5444,21 @@ console.log("Added a worksheet protection change event handler."); }); - >- - // 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) { - await Excel.run(async (context) => { - // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. - const protectionStatus = event.isProtected; - const worksheetId = event.worksheetId; - const source = event.source; - console.log("Protection status changed. Protection status is now: " + protectionStatus + "."); - console.log(" ID of changed worksheet: " + worksheetId + "."); - console.log(" Source of change event: " + source + "."); - }); - } -'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 row handler"); - 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"; - } + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml - return context.sync(); - }); + async function checkProtection(event: + Excel.WorksheetProtectionChangedEventArgs) { + await Excel.run(async (context) => { + // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. + const protectionStatus = event.isProtected; + const worksheetId = event.worksheetId; + const source = event.source; + console.log("Protection status changed. Protection status is now: " + protectionStatus + "."); + console.log(" ID of changed worksheet: " + worksheetId + "."); + console.log(" Source of change event: " + source + "."); }); - }); + } 'Excel.Worksheet#onSingleClicked:member': - >- // Link to full sample: @@ -5592,6 +5475,29 @@ console.log("The worksheet click handler is registered."); + await context.sync(); + }); +'Excel.Worksheet#showOutlineLevels: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(); + + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); + await context.sync(); + }); + - >- + // 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(); + + // This shows the top 3 outline levels; collapsing any additional sublevels. + sheet.showOutlineLevels(3, 3); await context.sync(); }); 'Excel.Worksheet#pivotTables:member': @@ -5611,52 +5517,155 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Worksheet#showGridlines:member': +'Excel.Worksheet#slicers:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/gridlines.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.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#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(); - sheet.showGridlines = true; + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; await context.sync(); - }); -'Excel.Worksheet#showOutlineLevels:member(1)': + }) +'Excel.Worksheet#autoFilter:member': - >- // 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/worksheet-auto-filter.yaml - Excel.run(async (context) => { + await Excel.run(async (context) => { + // This method adds a percentage AutoFilter to the active worksheet + // and applies the filter to a column of the used range. + + // 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 + }); - // This collapses the entire outline. - sheet.showOutlineLevels(1, 1); await context.sync(); }); +'Excel.Worksheet#copy: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/worksheet-copy.yaml - Excel.run(async (context) => { + 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: + 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; - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Worksheet#slicers:member': +'Excel.Worksheet#getNext: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; + + // 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#tabColor:member': @@ -5755,6 +5764,42 @@ } }); } +'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: @@ -5813,42 +5858,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: From 8d323adfad7535cc48f11aa74406b36a173032e9 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 29 Nov 2021 10:02:57 -0800 Subject: [PATCH 044/336] Remap data table snippet (#578) --- snippet-extractor-metadata/excel.xlsx | Bin 25398 -> 25402 bytes snippet-extractor-output/snippets.yaml | 34 ++++++++++++------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 4d7c9b962d57acc1a07688791c65ed974103fd79..99fc227a3176ffa825cab9bcebdeafa48eb99b09 100644 GIT binary patch delta 9944 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 delta 10002 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml + + await Excel.run(async (context) => { + // This method adds a data table to a chart that already exists on the worksheet. + + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the data table object for the chart and set it to visible. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load("visible"); + chartDataTable.visible = true; + await context.sync(); + }); 'Excel.ChartAxis#displayUnit:member': - >- // Link to full sample: @@ -573,23 +590,6 @@ console.log("The pie chart is NOT active."); }); } -'Excel.ChartDataTable#getDataTableOrNullObject:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - - await Excel.run(async (context) => { - // This method adds a data table to a chart that already exists on the worksheet. - - // Retrieve the chart named "SalesChart" from the "Sample" worksheet. - const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); - - // Get the data table object for the chart and set it to visible. - const chartDataTable = chart.getDataTableOrNullObject(); - chartDataTable.load("visible"); - chartDataTable.visible = true; - await context.sync(); - }); 'Excel.ChartDataTable#visible:member': - >- // Link to full sample: From 35197c19aa1dd520af066ca7389a97941b947731 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 30 Nov 2021 14:26:38 -0800 Subject: [PATCH 045/336] [Excel] (Range) Add accidentally deleted tryCatch (#579) --- samples/excel/42-range/precedents.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 127ae8caf..ab60a354d 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -146,6 +146,16 @@ script: 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: |- From 7d8fb208c7315e578ee20c2051c9b172cdbab0d9 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 30 Nov 2021 14:36:59 -0800 Subject: [PATCH 046/336] Run yarn start (#580) --- samples/excel/42-range/precedents.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index ab60a354d..de1562999 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -146,7 +146,7 @@ script: await context.sync(); }); } - + /** Default helper for invoking an action and handling errors. */ async function tryCatch(callback) { try { From a472cd5359786a0cd68f606d13a6838ff04e5c35 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 22 Dec 2021 16:34:14 -0800 Subject: [PATCH 047/336] [Word] (preview) Footnotes and Comments features (#582) * [Word] (preview) Footnotes feature * Add sample for Comments feature * Updates based on feedback * Updates based on feedback --- playlists-prod/word.yaml | 24 +- playlists/word.yaml | 22 ++ .../word/99-preview-apis/manage-comments.yaml | 275 ++++++++++++++ .../99-preview-apis/manage-footnotes.yaml | 245 ++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 12886 -> 14109 bytes snippet-extractor-output/snippets.yaml | 348 +++++++++++++++++- view-prod/word.json | 4 +- view/word.json | 4 +- 8 files changed, 902 insertions(+), 20 deletions(-) create mode 100644 samples/word/99-preview-apis/manage-comments.yaml create mode 100644 samples/word/99-preview-apis/manage-footnotes.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 57a501ac0..92aad8690 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -190,4 +190,26 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml group: Scenarios api_set: - WordApi: '1.3' \ No newline at end of file + WordApi: '1.3' +- id: word-manage-comments + name: Comments + fileName: manage-comments.yaml + description: >- + This sample shows how to perform basic comments operations, including + insert, reply, get, edit, resolve, and delete. + 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.4' +- id: word-manage-footnotes + name: Footnotes + fileName: manage-footnotes.yaml + description: >- + This sample shows how to perform basic footnote operations, including + insert, get, and delete. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + group: Preview APIs + api_set: + WordApi: '1.4' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index 8b840332c..6411af81f 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -191,3 +191,25 @@ group: Scenarios api_set: WordApi: '1.3' +- id: word-manage-comments + name: Comments + fileName: manage-comments.yaml + description: >- + This sample shows how to perform basic comments operations, including + insert, reply, get, edit, resolve, and delete. + 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.4' +- id: word-manage-footnotes + name: Footnotes + fileName: manage-footnotes.yaml + description: >- + This sample shows how to perform basic footnote operations, including + insert, get, and delete. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-footnotes.yaml + group: Preview APIs + api_set: + WordApi: '1.4' 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..bfbbe9431 --- /dev/null +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -0,0 +1,275 @@ +id: word-manage-comments +name: Comments +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' +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)); + + /** Set a comment on the selected content. */ + async function insertComment() { + await Word.run(async (context) => { + let text = $("#comment-text") + .val() + .toString(); + let comment = context.document.getSelection().insertComment(text); + + // Load object for display in Script Lab console. + context.load(comment); + await context.sync(); + + console.log("Comment inserted:"); + console.log(comment); + }); + } + + /** Edit the first comment in the selected content. */ + async function editFirstCommentInSelection() { + await Word.run(async (context) => { + let text = $("#edit-comment-text") + .val() + .toString(); + let comment = context.document + .getSelection() + .getComments() + .getFirst(); + comment.content = text; + + // Load object for display in Script Lab console. + context.load(comment); + await context.sync(); + + console.log("Comment content changed:"); + console.log(comment); + }); + } + + /** Reply to the first active comment in the selected content. */ + async function replyToFirstActiveCommentInSelection() { + await Word.run(async (context) => { + let text = $("#reply-text") + .val() + .toString(); + let comments = context.document.getSelection().getComments(); + comments.load("items"); + await context.sync(); + let firstActiveComment = comments.items.find((item) => item.resolved !== true); + if (firstActiveComment) { + let reply = firstActiveComment.reply(text); + console.log("Reply added"); + } else { + console.log("No active comment was found in the selection so couldn't reply."); + } + }); + } + + /** Toggle Resolved status of the first comment in the selected content. */ + async function toggleResolvedStatusOfFirstCommentInSelection() { + await Word.run(async (context) => { + let 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. + let toggleResolved: boolean = comment.resolved; + comment.resolved = !toggleResolved; + context.load(comment); + await context.sync(); + + console.log(`Comment Resolved status: ${comment.resolved}`); + console.log(comment); + }); + } + + /** Get the range of the first comment in the selected content. */ + async function getFirstCommentRange() { + await Word.run(async (context) => { + let range = context.document + .getSelection() + .getComments() + .getFirst() + .getRange(); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + }); + } + + /** Get the comments in the selected content. */ + async function getCommentsInSelection() { + await Word.run(async (context) => { + let comments = context.document.getSelection().getComments(); + + // Load objects for display in Script Lab console. + context.load(comments); + await context.sync(); + + console.log("Comments:"); + console.log(comments); + }); + } + + /** Delete the first comment in the selected content. */ + async function deleteFirstCommentInSelection() { + await Word.run(async (context) => { + context.document + .getSelection() + .getComments() + .getFirst() + .delete(); + await context.sync(); + + console.log("Comment deleted"); + }); + } + + /** Get the comments in the document body. */ + async function getComments() { + await Word.run(async (context) => { + let comments = context.document.body.getComments(); + + // Load objects for display in Script Lab console. + context.load(comments); + await context.sync(); + + console.log("All comments:"); + console.log(comments); + }); + } + + /** Set two paragraphs of sample text. */ + async function setup() { + await Word.run(async (context) => { + context.document.body.clear(); + context.document.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" + ); + context.document.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 basic operations using comments.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

First, select content 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/samples/word/99-preview-apis/manage-footnotes.yaml b/samples/word/99-preview-apis/manage-footnotes.yaml new file mode 100644 index 000000000..743498aed --- /dev/null +++ b/samples/word/99-preview-apis/manage-footnotes.yaml @@ -0,0 +1,245 @@ +id: word-manage-footnotes +name: Footnotes +description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' +host: WORD +api_set: + WordApi: '1.4' +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)); + + /** Set a footnote on the selected content. */ + async function insertFootnote() { + await Word.run(async (context) => { + const text = $("#input-footnote") + .val() + .toString(); + const footnote = context.document.getSelection().insertFootnote(text); + await context.sync(); + + console.log("Inserted footnote."); + }); + } + /** Select the footnote's reference mark in the document body. */ + async function getReference() { + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/reference"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + const item = footnotes.items[mark]; + let reference = item.reference; + reference.select(); + await context.sync(); + + console.log(`Reference ${referenceNumber} is selected.`); + }); + } + /** Get the referenced note's type, which is footnote. */ + async function getFootnoteType() { + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/type"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + const itemType = footnotes.items[mark].type; + console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); + }); + } + /** Get the text of the referenced footnote. */ + async function getFootnoteBody() { + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/body"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + let footnoteBody = footnotes.items[mark].body.getRange(); + footnoteBody.load("text"); + await context.sync(); + + console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); + }); + } + /** Select the next footnote in the document body. */ + async function getNextFootnote() { + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/reference"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + const reference = footnotes.items[mark].getNext().reference; + reference.select(); + console.log("Selected is the next footnote: " + (mark + 2)); + }); + } + /** Delete this referenced footnote. */ + async function deleteFootnote() { + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + footnotes.items[mark].delete(); + await context.sync(); + + console.log("Footnote deleted."); + }); + } + /** Get the first footnote in the document body and select its reference mark. */ + async function getFirstFootnote() { + await Word.run(async (context) => { + let reference = context.document.body.footnotes.getFirst().reference; + reference.select(); + console.log("The first footnote is selected."); + }); + } + /** Get the footnotes in the document body. */ + async function getFootnotesFromBody() { + 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); + }); + } + /** Get the footnotes in the selected document range. */ + async function getFootnotesFromRange() { + 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); + }); + } + /** Set two paragraphs of sample text. */ + async function setup() { + await Word.run(async (context) => { + context.document.body.clear(); + context.document.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" + ); + context.document.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 basic operations using footnotes.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

Insert footnote

+

1. Select text in the document.

+

+ + + +

+

3. Repeat steps 1 and 2 as often as you want.

+

Manage existing footnote

+

+ + +

+

Note: Ensure the main document body has focus.

+ + + + + +

Get footnotes

+ + +

First, select text in the 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/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 91726c835ff19a53ec9854a9e08d5d189ee0ab67..aaf87e9a033bb162226679a942ed4fc85616fffe 100644 GIT binary patch delta 7667 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 ZLB8Tbu<=mi;yuz?$B+6Y<^3!BzW~FK1atrZ delta 6443 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let comments = context.document.body.getComments(); + + // Load objects for display in Script Lab console. + context.load(comments); + await context.sync(); + + console.log("All comments:"); + console.log(comments); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: @@ -10605,6 +10620,18 @@ await context.sync(); }); +'Word.Body#footnotes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + 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#paragraphs:member': - >- // Link to full sample: @@ -10654,6 +10681,139 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); +'Word.Comment#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + context.document + .getSelection() + .getComments() + .getFirst() + .delete(); + await context.sync(); + + console.log("Comment deleted"); + }); +'Word.Comment#getRange:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let range = context.document + .getSelection() + .getComments() + .getFirst() + .getRange(); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + }); +'Word.Comment#reply:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let text = $("#reply-text") + .val() + .toString(); + let comments = context.document.getSelection().getComments(); + comments.load("items"); + await context.sync(); + let firstActiveComment = comments.items.find((item) => item.resolved !== true); + if (firstActiveComment) { + let reply = firstActiveComment.reply(text); + console.log("Reply added"); + } else { + 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/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let text = $("#edit-comment-text") + .val() + .toString(); + let comment = context.document + .getSelection() + .getComments() + .getFirst(); + comment.content = text; + + // Load object for display in Script Lab console. + context.load(comment); + await context.sync(); + + console.log("Comment content changed:"); + console.log(comment); + }); +'Word.Comment#resolved:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let 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. + let toggleResolved: boolean = comment.resolved; + comment.resolved = !toggleResolved; + context.load(comment); + await context.sync(); + + console.log(`Comment Resolved status: ${comment.resolved}`); + console.log(comment); + }); +'Word.CommentCollection#getFirst:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let range = context.document + .getSelection() + .getComments() + .getFirst() + .getRange(); + range.load("text"); + await context.sync(); + + console.log(`Comment location: ${range.text}`); + }); +'Word.CommentCollection#items:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let text = $("#reply-text") + .val() + .toString(); + let comments = context.document.getSelection().getComments(); + comments.load("items"); + await context.sync(); + let firstActiveComment = comments.items.find((item) => item.resolved !== true); + if (firstActiveComment) { + let reply = firstActiveComment.reply(text); + console.log("Reply added"); + } else { + console.log("No active comment was found in the selection so couldn't reply."); + } + }); 'Word.ContentControl#tag:member': - >- // Link to full sample: @@ -10800,6 +10960,101 @@ await context.sync(); console.log(base64.value); }); +'Word.NoteItem#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + footnotes.items[mark].delete(); + await context.sync(); + + console.log("Footnote deleted."); + }); +'Word.NoteItem#getNext:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/reference"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + const reference = footnotes.items[mark].getNext().reference; + reference.select(); + console.log("Selected is the next footnote: " + (mark + 2)); + }); +'Word.NoteItem#body:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/body"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + let footnoteBody = footnotes.items[mark].body.getRange(); + footnoteBody.load("text"); + await context.sync(); + + console.log(`Text of footnote ${referenceNumber}: ${footnoteBody.text}`); + }); +'Word.NoteItem#reference:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/reference"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + const item = footnotes.items[mark]; + let reference = item.reference; + reference.select(); + await context.sync(); + + console.log(`Reference ${referenceNumber} is selected.`); + }); +'Word.NoteItem#type:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/type"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + const itemType = footnotes.items[mark].type; + console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); + }); +'Word.NoteItemCollection#getFirst:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + await Word.run(async (context) => { + let reference = context.document.body.footnotes.getFirst().reference; + reference.select(); + console.log("The first footnote is selected."); + }); 'Word.Paragraph#insertBreak:member(1)': - >- // Link to full sample: @@ -11004,29 +11259,20 @@ await context.sync(); }); -'Word.Range#insertContentControl:member(1)': +'Word.Range#getComments:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml await Word.run(async (context) => { - let results = context.document.body.search("Contractor"); - results.load("font/bold"); + let comments = context.document.getSelection().getComments(); - // Check to make sure these content controls haven't been added yet. - let customerContentControls = context.document.contentControls.getByTag("customer"); - customerContentControls.load("text"); - await context.sync(); + // Load objects for display in Script Lab console. + context.load(comments); + await context.sync(); - if (customerContentControls.items.length === 0) { - for (var i = 0; i < results.items.length; i++) { - results.items[i].font.bold = true; - var cc = results.items[i].insertContentControl(); - cc.tag = "customer"; // This value is used in the next step of this sample. - cc.title = "Customer Name " + i; - } - } - await context.sync(); + console.log("Comments:"); + console.log(comments); }); 'Word.Range#getTextRanges:member(1)': - >- @@ -11058,6 +11304,74 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); +'Word.Range#insertComment:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + + await Word.run(async (context) => { + let text = $("#comment-text") + .val() + .toString(); + let comment = context.document.getSelection().insertComment(text); + + // Load object for display in Script Lab console. + context.load(comment); + await context.sync(); + + console.log("Comment inserted:"); + console.log(comment); + }); +'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 + + await Word.run(async (context) => { + let results = context.document.body.search("Contractor"); + results.load("font/bold"); + + // Check to make sure these content controls haven't been added yet. + let customerContentControls = context.document.contentControls.getByTag("customer"); + customerContentControls.load("text"); + await context.sync(); + + if (customerContentControls.items.length === 0) { + for (var i = 0; i < results.items.length; i++) { + results.items[i].font.bold = true; + var cc = results.items[i].insertContentControl(); + cc.tag = "customer"; // This value is used in the next step of this sample. + cc.title = "Customer Name " + i; + } + } + await context.sync(); + }); +'Word.Range#insertFootnote:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + await Word.run(async (context) => { + const text = $("#input-footnote") + .val() + .toString(); + const footnote = context.document.getSelection().insertFootnote(text); + await context.sync(); + + console.log("Inserted footnote."); + }); +'Word.Range#footnotes:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + + 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.Section#getHeader:member(1)': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index dbec5926b..8719f77b2 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -19,5 +19,7 @@ "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.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-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/multiple-property-set.yaml", + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", + "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index d2e57d8e5..f0d9ce979 100644 --- a/view/word.json +++ b/view/word.json @@ -19,5 +19,7 @@ "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.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-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/90-scenarios/multiple-property-set.yaml", + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", + "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file From 6a3a5afe4f91de721742d4cd0dc86e0b15a10667 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 27 Jan 2022 15:00:52 -0800 Subject: [PATCH 048/336] Updating package references (#586) --- package-lock.json | 1217 --------------------------------------------- package.json | 2 +- yarn.lock | 8 +- 3 files changed, 5 insertions(+), 1222 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 03e9f2a0e..000000000 --- a/package-lock.json +++ /dev/null @@ -1,1217 +0,0 @@ -{ - "name": "office-js-snippets", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "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==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@fast-csv/format": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", - "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", - "requires": { - "@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" - }, - "dependencies": { - "@types/node": { - "version": "14.17.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.27.tgz", - "integrity": "sha512-94+Ahf9IcaDuJTle/2b+wzvjmutxXAEXU6O81JHblYXUg2BDG+dnBy7VxIPHKAyEEDHzCMQydTJuWvrE+Aanzw==" - } - } - }, - "@fast-csv/parse": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", - "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", - "requires": { - "@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" - }, - "dependencies": { - "@types/node": { - "version": "14.17.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.27.tgz", - "integrity": "sha512-94+Ahf9IcaDuJTle/2b+wzvjmutxXAEXU6O81JHblYXUg2BDG+dnBy7VxIPHKAyEEDHzCMQydTJuWvrE+Aanzw==" - } - } - }, - "@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", - "dev": true - }, - "@types/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/js-yaml": { - "version": "3.12.6", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.6.tgz", - "integrity": "sha512-cK4XqrLvP17X6c0C8n4iTbT59EixqyXL3Fk8/Rsk4dF3oX4dg70gYUXrXVUUHpnsGMPNlTQMqf+TVmNPX6FmSQ==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.175", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", - "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/node": { - "version": "11.15.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.44.tgz", - "integrity": "sha512-fHAcNn2FlzDMA9rV5KP73r1cMZdbommWic2foHAEWoa/LITi91AueHDsJpnqjBEJ7bYoT2WC+KN1RL0vsM20zA==", - "dev": true - }, - "@types/shelljs": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.8.tgz", - "integrity": "sha512-lD3LWdg6j8r0VRBFahJVaxoW0SIcswxKaFUrmKl33RJVeeoNYQAz4uqCJ5Z6v4oIBOsC5GozX+I5SorIKiTcQA==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", - "requires": { - "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" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "requires": { - "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" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-indexof-polyfill": { - "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==" - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "charm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", - "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", - "requires": { - "inherits": "^2.0.1" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-spinners": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", - "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, - "commander": { - "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==", - "dev": true - }, - "compress-commons": { - "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==", - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "end-of-stream": { - "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==", - "requires": { - "once": "^1.4.0" - } - }, - "escape-string-regexp": { - "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": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "exceljs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", - "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", - "requires": { - "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" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "requires": { - "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" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - } - } - } - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "exit-on-epipe": { - "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": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", - "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", - "requires": { - "@fast-csv/format": "4.3.5", - "@fast-csv/parse": "4.3.6" - } - }, - "fs-constants": { - "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": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "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": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", - "requires": { - "has": "^1.0.3" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jszip": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" - }, - "lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isundefined": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", - "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node-status": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", - "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", - "requires": { - "charm": "1.0.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "0.2.0", - "colors": "1.1.2" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "printj": { - "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": { - "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": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } - }, - "set-immediate-shim": { - "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": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "3.9.9", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", - "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - } - } -} diff --git a/package.json b/package.json index 5aa32195c..8650d29c4 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "lodash": "^4.17.21", "node-status": "^1.0.0", "rimraf": "^3.0.0", - "shelljs": "^0.8.3" + "shelljs": "^0.8.5" }, "devDependencies": { "@types/chalk": "0.4.31", diff --git a/yarn.lock b/yarn.lock index e42ba990f..940e6c41d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -811,10 +811,10 @@ setimmediate@~1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" interpret "^1.0.0" From 207065fae0d9d0032d053bad4016f146c1e3134a Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 27 Jan 2022 15:31:07 -0800 Subject: [PATCH 049/336] [Excel] (Data types) Add preview sample for formatted number data types (#584) * [Excel] (Data types) Add preview sample for formatted number data types * Update excel.xlsx and run yarn start * Adjust spacing, run yarn start * Update comment * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Remove comment per code review feedback * Incorporate feedback from code review * 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> --- playlists-prod/excel.yaml | 11 ++ playlists/excel.yaml | 11 ++ .../data-types-formatted-number.yaml | 160 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 25402 -> 25533 bytes snippet-extractor-output/snippets.yaml | 76 +++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 260 insertions(+) create mode 100644 samples/excel/85-preview-apis/data-types-formatted-number.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index c1134d111..a80d32ee0 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1116,6 +1116,17 @@ group: Worksheet api_set: ExcelApi: '1.1' +- id: excel-data-types-formatted-number + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index cb648e492..11a250837 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1116,6 +1116,17 @@ group: Worksheet api_set: ExcelApi: '1.1' +- id: excel-data-types-formatted-number + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/data-types-formatted-number.yaml b/samples/excel/85-preview-apis/data-types-formatted-number.yaml new file mode 100644 index 000000000..bfc1cb27e --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-formatted-number.yaml @@ -0,0 +1,160 @@ +order: 1 +id: excel-data-types-formatted-number +name: 'Data types: Formatted numbers' +description: This sample shows how to set and get data types using the formatted number properties. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +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)); + + async function setFormattedNumberDate() { + await Excel.run(async (context) => { + // This method creates a formatted number data type, + // and sets the format of this data type as a date. + + // 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(); + }); + } + + async function setFormattedNumberCurrency() { + await Excel.run(async (context) => { + // This method creates a formatted number data type, + // and sets the format of this data type as a currency. + + // 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(); + }); + } + + async function getFormattedNumber() { + await Excel.run(async (context) => { + // This method prints information about data types + // in cells A1 and A2 to the console. + + // Get the Sample worksheet and two ranges on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const currencyRange = sheet.getRange("A2"); + const dateRange = sheet.getRange("A1"); + + // Load the data type property of the ranges. + currencyRange.load("valuesAsJson"); + dateRange.load("valuesAsJson"); + await context.sync(); + + const currencyValues = currencyRange.valuesAsJson[0][0]; + const dateValues = dateRange.valuesAsJson[0][0]; + + // Print information about the data types to the console. + console.log("Date"); + 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("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); + }); + } + + 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(); + }); + } + + /** 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 the formatted number data type.

+
+
+

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/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 99fc227a3176ffa825cab9bcebdeafa48eb99b09..e25cee19a0eb704d03b5c021c97f8a9a7d076d63 100644 GIT binary patch delta 15883 zcmZ9zb97}<(>{1(+qToOt&VNm9oskVPRF^i)3MXBZ5tiiwkPlV&CK_k*?*j~&a-RP zskQM`ojSW(2f;dqz-rQAK(I#0b-VCX;6OK}b~|_o0Du(+06+l%0A6;?o{la*OdTD6 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 N+pr*zn9+Y~{|_kYam)Y! diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 542c7e558..fc6e79cc6 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -2500,6 +2500,57 @@ await context.sync(); }); +'Excel.FormattedNumberCellValue#numberFormat:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml + + await Excel.run(async (context) => { + // This method creates a formatted number data type, + // and sets the format of this data type as a currency. + + // 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/85-preview-apis/data-types-formatted-number.yaml + + await Excel.run(async (context) => { + // This method creates a formatted number data type, + // and sets the format of this data type as a date. + + // 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.IconSetConditionalFormat#criteria:member': - >- // Link to full sample: @@ -4098,6 +4149,31 @@ targetRange.format.autofitColumns(); await context.sync(); }); +'Excel.Range#valuesAsJson:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml + + await Excel.run(async (context) => { + // This method creates a formatted number data type, + // and sets the format of this data type as a date. + + // 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.RangeAreas#format:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 203b0519e..bea0730e7 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -117,6 +117,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index ac5bf4015..e6b355c6c 100644 --- a/view/excel.json +++ b/view/excel.json @@ -117,6 +117,7 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", + "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 3c3501672a676420c642d2fb68b1d978bfb1849d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 31 Jan 2022 16:09:44 -0800 Subject: [PATCH 050/336] [Word] Remap snippet to Body.insertParagraph (#588) --- snippet-extractor-metadata/word.xlsx | Bin 14109 -> 14107 bytes snippet-extractor-output/snippets.yaml | 42 ++++++++++++------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index aaf87e9a033bb162226679a942ed4fc85616fffe..2437f7e1a44665776b342da4101fc22c0d5d93ea 100644 GIT binary patch delta 3367 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 delta 3369 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index fc6e79cc6..5f78a93f0 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10679,6 +10679,27 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); +'Word.Body#insertParagraph:member(2)': + - >- + // 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. + let 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: @@ -11142,27 +11163,6 @@ await context.sync(); console.log("success"); }); -'Word.Paragraph#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. - let 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.Paragraph#text:member': - >- // Link to full sample: From 55e6b0c844f091c1160b23567704aeaa884c4008 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 2 Feb 2022 14:31:19 -0800 Subject: [PATCH 051/336] [Word] Replace context.load instances (#590) --- samples/word/99-preview-apis/manage-comments.yaml | 10 +++++----- snippet-extractor-output/snippets.yaml | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/samples/word/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index bfbbe9431..6ede84210 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -25,7 +25,7 @@ script: let comment = context.document.getSelection().insertComment(text); // Load object for display in Script Lab console. - context.load(comment); + comment.load(); await context.sync(); console.log("Comment inserted:"); @@ -46,7 +46,7 @@ script: comment.content = text; // Load object for display in Script Lab console. - context.load(comment); + comment.load(); await context.sync(); console.log("Comment content changed:"); @@ -88,7 +88,7 @@ script: // If it's resolved, set resolved to false. let toggleResolved: boolean = comment.resolved; comment.resolved = !toggleResolved; - context.load(comment); + comment.load(); await context.sync(); console.log(`Comment Resolved status: ${comment.resolved}`); @@ -117,7 +117,7 @@ script: let comments = context.document.getSelection().getComments(); // Load objects for display in Script Lab console. - context.load(comments); + comments.load(); await context.sync(); console.log("Comments:"); @@ -145,7 +145,7 @@ script: let comments = context.document.body.getComments(); // Load objects for display in Script Lab console. - context.load(comments); + comments.load(); await context.sync(); console.log("All comments:"); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 5f78a93f0..670f7aba3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10587,7 +10587,7 @@ let comments = context.document.body.getComments(); // Load objects for display in Script Lab console. - context.load(comments); + comments.load(); await context.sync(); console.log("All comments:"); @@ -10845,7 +10845,7 @@ comment.content = text; // Load object for display in Script Lab console. - context.load(comment); + comment.load(); await context.sync(); console.log("Comment content changed:"); @@ -10869,7 +10869,7 @@ // If it's resolved, set resolved to false. let toggleResolved: boolean = comment.resolved; comment.resolved = !toggleResolved; - context.load(comment); + comment.load(); await context.sync(); console.log(`Comment Resolved status: ${comment.resolved}`); @@ -11344,7 +11344,7 @@ let comments = context.document.getSelection().getComments(); // Load objects for display in Script Lab console. - context.load(comments); + comments.load(); await context.sync(); console.log("Comments:"); @@ -11392,7 +11392,7 @@ let comment = context.document.getSelection().insertComment(text); // Load object for display in Script Lab console. - context.load(comment); + comment.load(); await context.sync(); console.log("Comment inserted:"); From 6ffa656f7819983442b9e488dff70f3106cf6c6a Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 9 Feb 2022 13:18:09 -0800 Subject: [PATCH 052/336] Changing terms (#593) --- samples/excel/50-workbook/create-workbook.yaml | 4 ++-- samples/powerpoint/basics/create-presentation.yaml | 4 ++-- samples/powerpoint/slide-management/insert-slides.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index 289d412d0..0de32fc67 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -23,7 +23,7 @@ script: reader.onload = ((event) => { Excel.run(context => { - // strip off the metadata before the base64-encoded string + // Remove the metadata before the base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); const mybase64 = reader.result.toString().substr(startIndex + 7); @@ -32,7 +32,7 @@ script: }); }); - // read in the file as a data URL so we can parse the base64-encoded string + // Read in the file as a data URL so we can parse the base64-encoded string. reader.readAsDataURL(myFile.files[0]); } diff --git a/samples/powerpoint/basics/create-presentation.yaml b/samples/powerpoint/basics/create-presentation.yaml index 990e8bef9..3d20e4346 100644 --- a/samples/powerpoint/basics/create-presentation.yaml +++ b/samples/powerpoint/basics/create-presentation.yaml @@ -20,14 +20,14 @@ script: const reader = new FileReader(); reader.onload = (event) => { - // strip off the metadata before the base64-encoded string + // Remove the metadata before the base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); const copyBase64 = reader.result.toString().substr(startIndex + 7); PowerPoint.createPresentation(copyBase64); }; - // read in the file as a data URL so we can parse the base64-encoded string + // Read in the file as a data URL so we can parse the base64-encoded string. reader.readAsDataURL(myFile.files[0]); } diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 227c5f59c..e8b934b29 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -16,7 +16,7 @@ script: const reader = new FileReader(); reader.onload = async (event) => { - // Strip off the metadata before the base64-encoded string + // Remove the metadata before the base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); const copyBase64 = reader.result.toString().substr(startIndex + 7); From 0b4a279b4be198aaa22ada5659767acd1a4ba7a9 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 16 Feb 2022 16:31:35 -0800 Subject: [PATCH 053/336] Removing stray code ticks (#595) --- samples/excel/90-scenarios/working-with-dates.yaml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/samples/excel/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 5504a56a0..05761ffdb 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -18,7 +18,6 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const now = Date.now(); console.log(`set (timestamp): ${now}`); @@ -29,7 +28,7 @@ script: console.log(`set (MSDate): ${nowMS}`); const dateRange = sheet.getRange("B4"); - dateRange.values = [[nowMS]];`` + dateRange.values = [[nowMS]]; dateRange.numberFormat = [["[$-409]m/d/yy h:mm AM/PM;@"]]; dateRange.format.autofitColumns(); @@ -42,14 +41,11 @@ script: await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const dateRange = sheet.getRange("B3"); dateRange.load("values"); - await context.sync(); const nowMS = dateRange.values[0][0]; - console.log(`get (MSDate): ${nowMS}`); const nowMoment = moment.fromOADate(nowMS); @@ -65,7 +61,6 @@ script: await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample").delete(); const sheet = context.workbook.worksheets.add("Sample"); - const data = [ ["Now"], ["=NOW()"] @@ -79,7 +74,6 @@ script: const dateRange = sheet.getRange("B3"); dateRange.numberFormat = [["[$-409]m/d/yy h:mm AM/PM;@"]]; - dateRange.format.autofitColumns(); sheet.activate(); From ec0dfe6bfe7d02fea1364ab9d5d5af089e08766b Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 17 Feb 2022 17:19:33 -0800 Subject: [PATCH 054/336] [Excel] (Data types) Add preview sample for web images (#592) * [Excel] (Data types) Add preview sample for web images * Update web image sample, adjust HTML and CSS * Change description * Update excel.xlsx * Run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 11 + playlists/excel.yaml | 11 + .../85-preview-apis/data-types-web-image.yaml | 203 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 25533 -> 25065 bytes snippet-extractor-output/snippets.yaml | 61 ++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 288 insertions(+) create mode 100644 samples/excel/85-preview-apis/data-types-web-image.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index a80d32ee0..26a22d9be 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1127,6 +1127,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-web-image + name: 'Data types: Web images' + fileName: data-types-web-image.yaml + description: >- + This sample shows how to set and get web images in a worksheet using data + types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 11a250837..10cfab696 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1127,6 +1127,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-web-image + name: 'Data types: Web images' + fileName: data-types-web-image.yaml + description: >- + This sample shows how to set and get web images in a worksheet using data + types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/data-types-web-image.yaml b/samples/excel/85-preview-apis/data-types-web-image.yaml new file mode 100644 index 000000000..55f89d604 --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-web-image.yaml @@ -0,0 +1,203 @@ +order: 2 +id: excel-data-types-web-image +name: 'Data types: Web images' +description: This sample shows how to set and get web images in a worksheet using data types. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +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)); + + async function insertImage() { + await Excel.run(async (context) => { + // This method inserts a web image into the currently selected cell. + + // 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; + clearForm(); + + // Load the active cell. + const activeCell = context.workbook.getActiveCell(); + activeCell.load(); + await context.sync(); + + if (!imageUrl) { + console.log("Please enter an image URL."); + return; + } + + // Create a web image object and assign the image details. + const webImage: Excel.WebImageCellValue = { + type: "WebImage", /* The string equivalent of `Excel.CellValueType.webImage`. */ + address: imageUrl, + altText: imageAltText + }; + + // Insert web image into the active cell. + activeCell.valuesAsJson = [[webImage]]; + + await context.sync(); + }); + } + + async function retrieveImageInfo() { + await Excel.run(async (context) => { + // This method retrieves image data from a selected cell and displays it in the existing input fields in the task pane. + + // Load the active cell information. + const activeCell = context.workbook.getActiveCell(); + activeCell.load("valuesAsJson"); + await context.sync(); + + // Get image data from the active cell. + const values = activeCell.valuesAsJson; + const webImageData = values[0][0] as Excel.WebImageCellValue; + const webImageUrl = webImageData.address; + const webImageAltText = webImageData.altText; + + if (!webImageUrl) { + console.log("The selected cell is missing an image URL. Make sure to select a cell that contains an image."); + return; + } + + // Assign image data to corresponding input fields in the task pane. + $("#url").val(webImageUrl); + $("#alt-text").val(webImageAltText); + }); + } + + async function openImage() { + await Excel.run(async (context) => { + // This method retrieves the image URL from the selected cell and opens that image in a new browser tab. + + // Load the active cell information. + const activeCell = context.workbook.getActiveCell(); + activeCell.load("valuesAsJson"); + await context.sync(); + + // Get image URL from the active cell. + const values = activeCell.valuesAsJson; + const webImageData = values[0][0] as Excel.WebImageCellValue; + const webImageUrl = webImageData.address; + + if (!webImageUrl) { + console.log("The selected cell is missing an image URL. Select a cell that contains an image."); + return; + } + + // Open the image URL in a new browser tab. + const tab = window.open(webImageData.address, "_blank"); + }); + } + + async function clearForm() { + // Clear the input fields in the task pane. + $("#url").val(""); + $("#alt-text").val(""); + } + + 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(); + }); + } + + /** 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 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.

+ + +

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.

+ +
+ 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; + } + + label { + display: inline-block; + margin-bottom: 5px; + margin-left: 20px; + min-width: 80px; + } + + input { + display: inline-block; + padding: 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/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index e25cee19a0eb704d03b5c021c97f8a9a7d076d63..a28dd8dd6956dcd81a2611a75c8438428ba51b52 100644 GIT binary patch delta 16057 zcmZ9z19V_PvoILjPG+KsZ5tEYwrwXj_QZB3wvCBx+nCtKY`*X9?%VzQ+;h+EI@ML( zUENjH)wjBaK~MTYYbRj=1rJ&ocyJI9CTI{4WDpP#4;uz|dnaondwXko4_li`RYm(u zMijr?#()0ra=reNg0kfxLKO>gi)&4>$?(N>a5%X0h2^i??ry?s)$E~@0<}ie9BSyBwQd?WoGt(6tIX^1Y8|f_RwAe)e`ATt$yBhtNWnume z*c$^-!S(4GsWN)EtZt3E&`0s##&jOk#NWydD6g`+6Qff;BAFH!VvgJM=M}bo(+Sfe z_oAo{!ly(SS!h%=6D2IFfPVN5cKC@}M~dv=Q4@wv(TmQ54&c|cc`@gWSVcbHcVi}O zEuuU^p<9#eV)sP>x)z;|6b`;C<+~vmU8M`Cf;`%DgnPr)K{q_G?1XHb2viQF-Ur-a z-fGP6q!kXanB9SfPr0*Hd2 z1A4T5FmJdwcM|~UqzMjoAd*#6l&Z+I0!V)Yg^h7NC=&3{YL-Pm*? z{EN$3Rd4Em>ix{x#&t7>HTvxQv#d_Iz3q37PL&GW+dz(H`{?Z&e>(DAm1BLcj70># z5?Er?QF1pF(HwjO3oOpTX7OUb`X1DDTCC7tccC$DJpL&sRZ9nN^@qB{7~g%27t#7> zlj^p9=A>wdA4J2$YhlM3Zl>#q#{H9+Hu&bcL^H1q1RV&XKwlc|i3MEH`x-$j6LBK? zOv?pLXeW#^Ymmuasm0r4`W~bTdy${j3<|p4VuH>r ztD_H}zOPepvL=ZJ#XjnkE8~ztFZn5@7N+le3n7Q!kfF#X@k|3UXZHP!eOvQs$jW-f z^mJ2|8tdOk<7LMpkm&(CyL{d=`tlHfK7Vzreq7A{iQ{h!u~bC`Z!R8hPYCTk3eMYn067i3}!l zqY@^T@NSZyH$O>y$OM&;OandKTJ14l#6dX9_4?>Pmi2u!(NbSMdb_jletmtPU=5+G zFnjoT86I?fOub`SK9o&gZf4rfy^7}fw>xPM+^w};B3OTW`T$GGD& zYreq81M;!GUdQR=+2y2ZHqXeJB!4c>LoUGbWoth@3S>*m_K_2cJbd$}ya!Wp25iR{t)|@@HxmtF1SI#J|6C*gf!f0h~p&0%9jSEMks+wUz zHT&bJ$=fJS5p*8@K5qME_mnIBgEpfDTn)5Dj)`4667ZC07G(<-F1@kj0E?=z_X8}+ z59c_-5qw{*7+yWsGsYY|*pC?YKu|;-SoZsS_G3z zUSRzxQSS{-S;$8X9WPX#^^tx!gN)j+`B~oH& z0rt)m7K3ul+1Q?l`ouqkfjYXA$;uUQ^DQpo%mg}Tb=L=`Mhhd`lW973GV zbX}9q#t(H!9=%a6|8Z!HW{xz@-JHMqK_Z`%X%G7^71Md`0&A4jH^K~yxX_6EBIQ2jK|qo22`Aku`9lx@~Dd4c&U_78FH5E-ki zv?`o@E3h`PK15W^bv(PfJHM$ZfG6i#`;TH&o0~-BM@{r)ZS8B^5@9fyD-bN_Mtk1J z1evpn z=R9|sgKjcG^ecYiCg^MQXQ3?C43;JmGH`Z8T;d2>f%1ubVJsy2sQ7O?fDx%aQtZA8 z#zfNUu~fIhlmY3J=^ZJy=P!Rw!O}$$B_~sX>t7=?DX*n%31i8k^pwO}?wJg~6ngk= zg-aJt#6_puS3HSJC*cwZMLZgO$DNnqLfejtcbboyt0@&SyUVJoNEHtj5;V5v3nK$L zWdBTG;FO&m=e}g>LN*w<2%ALzx?TGAS#IQBK zVOLI{Y3f$tF*A-i@7s#`-|HP9g{kCC+YGis_{Sv@Ke%ESP@}IhtWS(7k@G%zFlK9T zi&b+3BCJQV0-R2Kz0PD!OYm z%EgE&f_IklYOVY4E1;(1xgLc9Y?HbXP{^J0^<{7PMzzD`*uZ{>i1WD?gM2s=U58wQ zzD1Sc-sI{qfdu1YYJAHF_3ijJK#DWHiy-94wN)<#V%A zEEUsH7a+ybw+YB>@lhb>PK5b2uwDecG>LzTvdC5CX4n#k0P>;I=1d|vcg^W^w#e89 z`{1Q$Yt;6U13deuE6PYMBEMpDmYb1WV3$auvFuxH>3-{wzVG8Eh(8BM*j`ppNE2`u zAu8VlEr)9dBD^~2e_zj|ex;QAYpf^L?li_lZu!TOcfSiJC$@yULyIXHW_pi{(mT4l zB2LpPs%bA49cZ8^CWdQYM^H!CoHHzvUmVU#S41y;>CyC59QakrRXdzNL{UoRt1wH?G-_4v2@m zuyqW!UEo34jD*4TtS=q`1^p$o6r=t4@0L6!^+#>0kxrh-OU1e3?bP!$4qRwOwNHXn z=l)hcM^Tn@{SCszBGek=Lz9-4dWo@>_OU)|Rk{KA50z9@b->7&ydr5^rCtw(%4AcE2RueIo<><3 z-5r}k5hCrtUvXm&s69Q#QWR76);mNmPq$^MBAj-%WW8BkKz1~~L%xlp$nX%gN{~sG zRcvB@s01y)pZgJMX3?>YJtW)(24>j>4q1oJg`2XMiPNhgKr`WY<{PY${}LW1LYyU6 zJRs_7-Vt(I)14(_RIrjoabHq!CSXIAVI_=rTED(oU=+dYOCZ*f%*iCpsF@Rq#b=1= zC>8gqp{|`ArV4Ioj?8g`RjL@OKwh4{*2Sw__f-9KhJsCP^~WlX;^Jt5p2M(Mqu*-= zq0dq)X%ATo+Q<`U+R2(Agfuo0o<@qX7udQPbn?crbcOge2QyO{nmtr=-f(S-zj!SW zi3t0i%Cjb@Yr-u+)yQM$ZC<{p_5F%K-32uN!)5Gl`&$KFiU}nxRSwO>Tew2GE@y;; z?l7qV9SKzEa|B+BU|kl)MmxGRQt1JAJUG?qN~5)DCXOH@JyBYK$jydm8FishG7z_O zeHfb3SO27@$`Y^Wz`@ltHR#Ubf zAL|0K0(*hPbN{v}dDHPHghA3u@!Eca>z9$dE*yNpCu)R2KG9p~ZGU291}H>Jzwi+4 zha@7!i}f1kzWk2R=~CGdYhe_5S3gKYt=69V1jox|rD!Z`v=fNvle?Uv5#S?a$W6fh z*FsuGD1o~u!C4~iGZO7t*!wU}px<-vu!)X;5~T*?dNm#$C9;ic;yohKL2wYXewl-x zKwRG{Rh?N)0%4dyZOff~UYUVKrgv0j0^L0i_97V~m&Aj`f-lp;|B2`|9$Cpfh6&bq zxL^+QfItkNC0CFRnrvr$4rmZQ-{UkW9EiUERw_paj`FE|^QAgVRHHEE>jKkTJ|X5Dl;l$brcjsbXMf763>M6f4AJ}dqCv&V{fB(d8qh}gTUOjye(ywTGS74^! z=8hC?vXsIIE7M-cC;~7*E^CR&K_<2@Z;|Xk8U(=-X$B)A_4hqaa!NPW-P= zh8kSNL61KMMpjoXdpLCuZPbBX3&MIvFXL1Vs3T zw<1G4Ao-3;eIy7>Ho9xqh=Qkf6yM|HXVYznqEN0qdB;7(2IbqED?g~{-M^1mxt~N# zlF;7t=ksKu&R1)kcAlKi`lS$}_r^{0vW-+desDdaJVT%xWfw6CTTG0HdM|0+adDiL z%gBdFn8W2GC{Vx=4{j|H_@9uJ09P%IrgDzP%VK;O27Tjo&1W#!82RTs8Lskw=a%)* zlR?3{Cp-zFh0JSHsq}eJymqnz=hj3@A>??(Pr+j{7zG)R)eD;#lbkogD4{szRB~<| z1f34A8A~Qwm~($zsprA)Uqq#Z!>PO8En&L7sAOQt$RU8RpIoi;w{3HmUX;qp_9gsH zqnQNy!eyu^+=QlO1tH_Gsa!sA}YisKbHH{uiMR5g_VX8X*rcxSA&*rAyqPDVl zj~Xm6QuqR@xw?1Zt+y3rs9JxmtJLF;Lc4pGc~~@lQxN-L8Z5xZNbzG^fIeTwCb$#t zNnbyPORC@qN1UrD@1PC^=YCUo(M4zUoZRNu!Sz8@a&#%`P=sdU|5s*yvO6)s+ZQbR zr}XX!z387=tb}&wWK`1<6DnG!vrkhw=HC-^E4VSB(S%Bc5irWmC{a3sAu^fd0FB4a z4!xn!r_9Z{S@yqBo@vX-xqp6{?~&y6=zI1BQK5|B+32R1cpy6Qgd_JMy(c;M8s%e; zxRV1xNwHS4f*m$A(7+31BvQy&F=i!D=X5Q=i``+WjS%9u#iMOJx%~D+X>t^NU?wB$ zJb)iqD62Cd@lt4y{3u-u{5!qJvw1&gFycMGcg(;UtF}`;1Z=`r(nz(pS39#X zB0)gl6B?TvCq<+9(7npJ$J{a2?38kT&Yb|i6^yMC_&=nkSUeX(3L2_Dqy5sC^b>TBenZslLWqMN_1CNfZ|O@Z1VSyPPq#G0^LmntBK`CZ*1!5W5zD z)2a^Sf1}Pm6E9Bhmc}9`JZ$a)#p#YnEteig@@U~~8se#PU$Z|5wwq)vI`?>sK3o7C z!zp2o2t>oXY#*}^8E(puxDkBjyXM+F4g}!Ml+b7YEnX9hNEMsVV9$(pCO7b{={42* z17DuGnM+Hh+H;cF;2ym4zWKYeOD5F`@u}zB+SLqq?`FN!wz5+sI1`66pw3^4Y?kde z9KnC+-Y+kjH#uV-Z$#eHahCygqR*2H4wfF60TZkv>1{wBhk zX*$FwzXvy&Al)b#=p&Jz;&=kx{X0VanX8uLANYU5ISriz#9(mp7ysXg9@np}zzToJs|&>|%SY^)MG`g=5xgv0%l=6Fv{=g-V%lG6+x1 z_HowJbK1+I(83l8<)mq1;s|mCG-4u|Jv-OS%f1;aaSnSUl_lM`kx^9Ew)XdT%kI=u zA$!p1uwb!c6KfeBc(BQ4qS8lGc*O3qLI7=Hr(g}DT~$z;0?idA%n%D^?Asiw+3EMt zO6n;CvQ;@jWA5<447>?_d(R5*41?nx2vy_`w}C2uEFON?% z?Rx&IHFo+!pW0S!j8L4mB1DhjHvlWMH$K|tkFaTqLIGSu4q7a8KjAJC$5CP2kc6Ro zYlV?RnbIvRUTTH(XnXC#KMwaeq>h+*j6)zx{mEY}sQ2W|^Xhd-w~FTwQ>9;N>5r#n za~h);UHmK3y#HRj7 zj3fm==KsyCxM21H;|rG!8Fd6 zZ(`j6^PSg_LyDgdx(4^H?oOd>BU)@A(sto7plhb*{fXxGi6)mJSP^$5V>7m__$LHg zzdJblPjJI+6{C5BN^|#Uj|1rUXX~oehPzY;wQkJcHYsgO9NEbrcJ_0bcK+ai?a?^b zT}xloB-)~+XME}1(i%Y_)uv_Ui&lP*8Q18W)ojp&mVNC*_mAU=Ww>>=ndu+%2k<*? zz`_YtmAZQ4h>vWsc$KhS?7()n!P;I|4wv7X5wQ8<_c3zve7GF@FmQ3lFdc7x$JBL< zIH#RxDPB>#MRH^8c+Yid%U_?q-@@SbZY7>Q;&-qhYqCWfe$E$sreOB5- zF%3mPgQ=BecBER<$cW2{zic8fv1t!B4zW+~p!SS8cF|nKe#Nk(DjBd;oGsAT2A?H^ z>mA}`zGuFyw<*>$aW)NAHH9hRFxSyBYlnzJdjxfMqoW7hp;F8D-B#A=E zg|6ul|4sL(Ave=IZ|+sN&lR1{xHc1#6^*FRC`Iw4SZ-fpyL(Mcvr7o8fc+F*3Zrq^ zS|xRTWisUOKdq1Te2zyGs53Ry%|DGvK0596qfkP6Ylko)*s^{fNJ)B7%HK_2Y4mz{ zjZaNTt`xPK==Y>^IC2d!!d9pRXwG0euzn|69qo1v$rqaH?#>M+93FM$cv@+Mr0)kv@Z$$D$UV!r#mOi{E5sp(MyYmQhbTmk=S#B0=Ds&@b!v4@?#Ws6f}XyNxu-+x$S(dA+;m$59%I&SRKy}4(7;Fy=(K74IJ3J0 zcewinc{ZjBmD!;|5p`eGm%ws!JhF*(;*8x>VHc_k{T-`g(uHq)?vp;9A4m+7#$3~( zErB#Nuz#uy1MlZX2vVa*=$mc>@6({+0Wl*nlZrF57pUV^Kc8t_&G zS;Bm9)d(|WRK^Ysc}oca6p7c8qtq_&f@7uXz{bB{&^tJBH>**)k#Ets*^qEp@^NUL z-R$V@Ol-q-RIkK2iXiV6$aO-v9gc72e8Fm}Q|{k!M4n3KHx3((l~}w& zV_kBVD>6-oYRsdoh+iFE?GPGQy$FmpB&5dJ5W6PJrWMy;J2Y@+5pwruEFOd!04e9; zSHXB7(|OF$HuWOC@*>T-s=q<4!ig@h{8a5hSAP7-vC?i#@mo{7bY>?MeKP1#Ai%W^ z%0pLYmHDpHh6Z45)hyQP{6oZ?eTTST3jJf62=3E_S#yp0;ERU*i!TP&rPp6?{3R9y z{LXmGuR{RKSsLcl1}y-YY`D9KOd9+khtI4(84L{{S|uFAQb*<1MFXZGegzt8J8XuF z!3{8Vq^cQCOeSnOISBcqPyVcbnkUw%xx~XabT*k125J!gy5U+Ws4zlUN37we}eIov2_0z#0SuI=D6g; zob~8yQA9hJ{?Bw^MQ-W$RR1Bqdw3_M)qAUCJP2?pDj5c&DFD~QzOV3t<83 zsPvB+QoP3g_H*JT$D5--`rW1_dxgLu7Ygg*fT&sF8sI>@%&I~fG%yVmEAI}2kIFE( z!=7g#Rk`x0RVG?4gfiB2424u)h)>qB!^rEFdE&it1v<<9! z!fcjoBcQ?fnpJE@rD^QEP_!)y96=zvrg74zYGxbNJakGu>Xhy2n@v|utt^)IFxl^CkLiO z>L;A(1vh^R=T+OJJJ(-xs#DsMf8M(;rgmZXa5v!?h*~BTT^7P*xpX>*EST+06Wt%| zgQ;Al=s@E^1<*b;LTH*z=S^W&XMRZnG7p7g{Py+HX9Lv-|?%<}Y0>mkvOeZ8<=HO3%zU4|Z zY9G%bNNj9S;GLti5Qc|q!=jV;=McCK%`1vzJtO>$v_-02NXEpVU$N&+4ATh+L> zBWPys$U>M;{QX;<>jOsJU8dIsMtL9w5e4e;_Uf$!D<&39v*dSbQGY6y14(n2~*DuY zi!e+vTl+kfr%;*eV(qO+?~?dGZAmmAwSD;)h^)Arh@B^pHg)z}mTTr!1;vNpUD>MG znIhkz&onj-Njgs#vw@C1%`?i=7X$bu+j>^YSDQ=0;OF0AJpGnOxf7_`vJ24V{F$j@ zs2hkLfgMZ49_&)`Y&pxAF!`J4T)+5KbZ6L@p7{3%=Ffv_zsZee2TrfhESl;D`Nei1 z(AMq?Yh;R3?m0xj<@XhEvlKuZl`Q?5_TMy%*P!@DXDfAuAqC*D9z*s}f*lNT^=#7c zgX&KR#bG!_KoT!E{2d=u9MfTyQtp=H%~FlZ?(UuUnTMmC-B&sDysU@l1zE;!CQ0*H zLp>nt(U38r z243u%HEoU?Lm1#`XPftLr(1*_j@NKvQ{HgDz#V1FWRQ`}ULK}_xqjw!o94+ZeJa(X z-?drgC3A)Q3{+Kp!M^3Sdk~muU9rs(sxvmUvIsV|le{kxdN6-LH`?Qt*<9F?B_#dV zcr9&%Fqu7KDLs64nnGZ7m0j$+rYs$epql$L6)6>JqXkI!ph;7UqSv^LGiRlhcv6h+lMWI3XqJ-x#j=Xh(c(^oy)^bqpNX&hb zBU3wt6u^V<2sD6j?WL zs1^!ySld}yQ~S&O%g~BRTm_!A;oA6>|iw1ZXP-;3gugS!TIo zeF6PH@}5tiuaYHx_}bfay1opHp`IhJ301L>+P!AbAv&yNK6-@2#Lwu1!hwq=`?BX< z^NrJPtWpU=h`0Rl^Q40AT!D|Tt6?_}m}@1nU7~p?Hz$5U2(9aI1Qr_>g5%s6zZAmF z-Ib-*gb+^!FEs;uE)9UJrS8Fn;NX0Q ztd#BT^h!K6K1bZZ!w1t33OJ3V%0w)TmruI&(_<09B{qadDYE@m$A=wf5pgoO7X) z#F~g#_{)dZ|Dps(0LOgCkk*L8)ZuvgDAyxPNxWtmJ{X7()Hs(ha7^Id|0XL*+jv)J z@=|}5%9@H7oEWH4tKqi&JLkx;t49twPP~h8yYf#GYx+bkVZrou={Rtu4iu>UG-ybSxHf&yD@`+|GOi0sW(uj?ZHxdkz8mPA%p1~phpgrzg# z#uHPk*Fhp&u8RAc)H8{-B((ef5+bBFI(c7Y2DW5griEGjWM6&0kAd!zm>UzLyU4{i zgAe#2iId%yVGrrIF#w)p7m|Emjwf0YC_#Gz6;J9jr4u9(XUqPP{X@AX5rVWVP(pB! zdlF9{lj5>e>$(v?SpsiPB?``8A1|b8gHEDnlVP0ftuag51Oc-A=19x^B>c@9Igp1P zi`RHRVL-J2ExDr%*@Jgw88>)m%Dh)OR~k68p_I?=n)b;i4P$J9x+8wdn+^ysVR)7v zQ$v(e4wz0c3>)&NG2h!V-?QXOMXDj@#eAMnP)Wc!fdCF0Vc&>9?#5{_rO2-9(DtS&gxhY%UivwOY(K@LfZmFI!g_MQ(k4e&c;Ji@B~LY7FC!mAkSvCP3e+q@dC;UoNa@^YzrVkRewa$I(O8R(xi(9$spV+LoYIUi6Wz|vzzU;XU1CZ-wN_7h{ zPHG{ad9Rr3!k^QGg=`zhKE&1O}87!|82fhR9omNcsFG!|_S@*Sl;Iy(Q( zp4xxz7}wSU$Ar2}>Vyld``-R{&V;q(nKS)`zWqA^Tfa}@*-95_$b&@JG6zveQ>%RK z%zwJSN)oF#*XLEZ<%$OlbW+Cy*^h?Kflz7~2zRp8x(^9rOC%3=j4RShx^bv7ov9N( z1qNyM>_4e3&0WLwU42`<6m@E}WO%D_3GmOHa$e|<7$XYQBvmRzo~YqMC#uFnEeWAT zc=+rOujr3tv;wJ^xJes+8+dqBYAN`x4EMgn7Tmcv$Rj@{;4G5>O(!hvmO?&?nj5p` zXksOBsTAV9iTG*!4|RIEks`7*<+zOXTnoN`elr4e)wpXXqZ9q($2#L13#n#mMqcHX zCw?C|AU!LWM~4IZ1{TL}2sbuZysj;9Y(euzCDptHcq1e)b*JY6Uh!G|RWx7YD25>l=LF2lqX+`G^<*oeDA;XcK`N;S^UwL)v{x zv~KCVTkc~_J0vZ~pZQn&u&E-SysHoAnXJ+1B9$6WC1ne zR>}allj)A|#xI$OPVA~cuYk^FkKB|HB_o>=n_m=_YnfF2Mazp`zc1PT+39b!TE*we z8dKROh-6!zN4IG>gjW)xcet*^j%zzPRC}zYNM#-N=6548&3GpSz(6LD`h2 zQ2V+!2h4K0UfPf)b(;8`h$%~Dy%y{Pn_A-6=QgINwwPJXE;z}oCrV^i+zVYp$?D5O zhPjqaPh};l4tVleDjenrk9p$;D#VxBg~%W9rDnZB_kct+S`dy*PFMgxR|O{{gks|Au)i*L0!?vAtG6Zhx$H}8xl|I(!)IwfPOMq;We_0$N| ze&`*hwA`~>qw~<3BMS^pQ#)W?Du8b3;5hHcrTy8xF?lYx5eLR&Az4@^y-Pj+_fqtXmod!7YAr(DmdSSzidXItId{clMDq z;iKc^%#`feO-EGQ3JK7gl!jxaqsXWc$<36*f4*;EP%`a%IX~sc%+=w;h}jG`i6E`v z+vRyObB0%g=c3L#3tF&=v+mMP{9+~@kbtBSmayDvSLRH*qsTZ~#(0Mq*qgxphN7C= zt{alEo3IQWL{`zgMo^&XM2+xJTWa>D$xyTAbV3YT8_t7zl>l}aazn4v1W302?a5ae zNx@3xU1^SQ^pPDuna?>&nn@nhr>0sX^vXabd{69=a_iJ9m8&xMF0U2O8?=Lz-_9P? zz>8{o%*V$o(9`!3gWjJ~A3#sSxB(wK0oULu+3a{7N;4~uk1WXTfO=E3Ol)x8#nQXV2^iX>OP^}gQlEPr#*N*CxeY7j8ajx?M zpVO3{P`wmqyiN!73DJ%UYn=Pg@)k@!s!FwM;e)9Qb@_9A=%GwzkL8=#U(z_)(4LsP z!kKU(fpxY{x6JUiDv~~~vfU@hsg)QcKc&~CZHRp`#;yyTzdvFgwjr&y`ASk$h}2SB zu<+^w$%xtCCO=B*BkaxmsBDV|N>Hlde8_X#&sHM{mRjX(IQ$> z(6ebjfXHhnt&x$l+5G1qb8@|;cHzt!YD59@ArQ0pP0ygjLyhs%Kz`p{7W{u zUO&ARH0$|)R?C@LX5e;JR}v=|)^Img`49pAo7lM}t}8JXM;6fzLnCB|6-b8_L?|}0 z9r8>won<)-x;K@F@-L;!+Wc(QE*WkoJ(;-e0>zGv?lt>^TQa(<_tHjc_)f~1e!+H} zw#!+W0?0);Df+1jQ`B9kN(l|8C@EhGk@zcWBf;)~_jrPNPzI-JL7<@uMJBsZM+>l( zgOxarWTv`Am=aSQ@=tAmBI7GpOW6-}`2?<&1Q|rg=3{?(Ts(4@ADoMofp!vaF6WeW z8hsf3CZaT2{jzj4Dv?%dIHcNrW$6jN1pqgGy-Y zUmCSL+MP|r=kLKNes}~R-Yd~fk2A@!I;<@fs2#hI+iP>Vei?bT+qgG&A4w5LC@rb^ zU+c<)zOvD>xwyq6`?hcbSHPgK6e*Pv>vvBavgTdVb}pA)&G^)MZQ6p1?~MNR)U>E~ zEEjpkHUIy+#Qg{Q|K179{8EJLV?;?r6G;IuW^9*}!9hUq5kWw{p8sTJIlFk;m^%L_ zC+l2YHg=sIr3-rmK=D{U?N71(mJ;+376@XgXwV{9(6PRExefAjB%cI9_W&C_)Hkcf#MNGv)fCO4{ zXtnsKJ9mKzYG;&l!{IbX5Mec@Ra|8`z8Wd_%DlyF>hxfSwmC>P#s%#fYPJH+5V??R z;cY@s$ioCynE4-FkcD}#cik?^s!0pih}aw7X|Wt5U0xk&l8e8As+<`}D3>6Kal2S; zLe?!saYD*Bm8;lYf-Eb0PAR)d0`7aVycs!hATPEOLI*Fqt83ODVukr7tLWk{BR(lK zmedrg-j+saV2U!m_YErgCV{zvyKYN9Y9E)pil8a}9(S7M!E-U7Cq&LmKP-DQaHXlA z#hkNJ<^!WdjFDyy7VVBPzdOZ>A$zjgR1eRt%gQ7Sv&==o(vOPR$efDf8D~QU~`D0F6PWybziu3C@Q>zS9za$ z&lHD}w7eccD>f*zh34IqkcowjGo~TN5qGS*H+Sbt(F!Py^JIRdhIor*^El~~hPA?Ah|4iFkY>lFI49O)Oo zy=;b&u)>gEV}{Xki{04A-K7SNt+hFD$JGe$IyGa1EV%fjbyisyL$|ksi<6jp(@pC2 z+vZURhrWgt)4=SZOjdkGo-wq4f&Fy*4YS5jI$0E`Bfd_`sP=y z2@(aCq6jG}T+!N%0VcOFaICgOi#n%*U8g!NGIW9aRN(Qle%m3jN!{M!)_}7LV#D3F zVET4M93nhGU>cBM#{R7O9Wxf8!$Nvr2h`^BGZmRnWFj!hAbDre? zmGwe1Kk7;!UhmlFgkaG5mVdx4%E5@xYNJYVaL4_AyW&ra5N%p-9F*XLpVJC^#SVNr zTCaXNe(qWst}EI+Rli3X`3Te76wy;JfpNW)c+IEsToM+`Deie^yJ6x!6!O`TU<3x3 zin9yt*M01r{m zozFThiB)j#jU&O{ene21Ms6pI~K}NvzA=G?|1xc+1h3bU4h4>Q5|%47d6sOiLTX)!>Sqr8bJjGX=~&^R$hGyq1-sQ z-EZM+oz#q+qRCIPt2xR=Td|)9@VsY=$dJ&jbsMJ`Qmo!3NxAiLhhZ&-T& zYe=(w7qbjh!!PV&^+mcV`aG57%>)~#j*5Z{ARmS#VyqGrLxYjXHVr2&EhEyBp@KH+ zB#~R=U1$h@f>_DyMzN9BDC7jyY^nkkni1%Q+TpHBpbM4MWry$OBh1YLIJVAcGFF~m zb3(g|gi2SAaAgIhMzK)#TI+qZ1DVII;8@aThF;jitczDwd-X|Lx=v;C4jf+JBGLav z&)2NaX%TQZ2EnCbV&e%~%=%~LeOLLJ%@c$cJ$B%m=e{YomIKgT3bYaFxkva7{q6f0 z(tNh0W)uFFDo5CMH}$ec@tA+`G-t)+=pNPnt@ocRSEI@{ z%>Z~enyPJZOA_&qu!aU&H#)pG_|)Ak%ppA)aa&~ z?R=bx+uLLDg&Ge|_u-cF?RZ-%>9~k0lz@SaVg<$^st_op;<&J_@_j~4A0%AmzSM2K zTHJ3Ejm8N(d$j!YQbgWNtsqCpm7c^TQ{fVe<18~A?Yf}I^%0&VY>uX~R^YB^)o5~% zV;ihEc)|fPM*5P|E+C&E{BLlQk>F_;6^}m#j#Q~2SJXb`5TFNLT(8dHGB%=#d0F}) zQ_^bOjM2r}irkD7EjuqdSs1l@H~j4TaX=VK)wdaX5Ox!ho56)h5 f|GSL7oFS{PHedO*|DR&5m6&8q0(GtPAK3o|u4HF2 delta 16462 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 670f7aba3..7d7999de0 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -5129,6 +5129,67 @@ textbox.textFrame.deleteText(); await context.sync(); }); +'Excel.WebImageCellValue#address:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml + + await Excel.run(async (context) => { + // This method retrieves the image URL from the selected cell and opens that image in a new browser tab. + + // Load the active cell information. + const activeCell = context.workbook.getActiveCell(); + activeCell.load("valuesAsJson"); + await context.sync(); + + // Get image URL from the active cell. + const values = activeCell.valuesAsJson; + const webImageData = values[0][0] as Excel.WebImageCellValue; + const webImageUrl = webImageData.address; + + if (!webImageUrl) { + console.log("The selected cell is missing an image URL. Select a cell that contains an image."); + return; + } + + // Open the image URL in a new browser tab. + const tab = window.open(webImageData.address, "_blank"); + }); +'Excel.WebImageCellValue#type:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml + + await Excel.run(async (context) => { + // This method inserts a web image into the currently selected cell. + + // 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; + clearForm(); + + // Load the active cell. + const activeCell = context.workbook.getActiveCell(); + activeCell.load(); + await context.sync(); + + if (!imageUrl) { + console.log("Please enter an image URL."); + return; + } + + // Create a web image object and assign the image details. + const webImage: Excel.WebImageCellValue = { + type: "WebImage", /* The string equivalent of `Excel.CellValueType.webImage`. */ + address: imageUrl, + altText: imageAltText + }; + + // Insert web image into the active cell. + activeCell.valuesAsJson = [[webImage]]; + + await context.sync(); + }); 'Excel.Workbook#properties:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index bea0730e7..e2b9ee959 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -118,6 +118,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml", + "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index e6b355c6c..784bc2b73 100644 --- a/view/excel.json +++ b/view/excel.json @@ -118,6 +118,7 @@ "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml", + "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 13447186fee8c778feea58817fdf7d3497cae903 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 25 Feb 2022 16:28:20 -0800 Subject: [PATCH 055/336] [Word] (content controls) How to work with onDeleted event (#597) * [Word] (content controls) How to work with events * Minor cleanup * Add track statement * Rename sample * Update samples/word/99-preview-apis/content-control-ondeleted-event.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Map snippet Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 11 ++ playlists/word.yaml | 11 ++ .../content-control-ondeleted-event.yaml | 160 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 14107 -> 14243 bytes snippet-extractor-output/snippets.yaml | 64 +++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 248 insertions(+) create mode 100644 samples/word/99-preview-apis/content-control-ondeleted-event.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 92aad8690..34e0e4ba2 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -191,6 +191,17 @@ group: Scenarios api_set: WordApi: '1.3' +- id: word-content-control-ondeleted-event + name: Delete content controls + fileName: content-control-ondeleted-event.yaml + description: >- + Register and trigger onDeleted event to track the removal of content + controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + group: Preview APIs + api_set: + WordApi: '1.4' - id: word-manage-comments name: Comments fileName: manage-comments.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 6411af81f..612c9114f 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -191,6 +191,17 @@ group: Scenarios api_set: WordApi: '1.3' +- id: word-content-control-ondeleted-event + name: Delete content controls + fileName: content-control-ondeleted-event.yaml + description: >- + Register and trigger onDeleted event to track the removal of content + controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + group: Preview APIs + api_set: + WordApi: '1.4' - id: word-manage-comments name: Comments fileName: manage-comments.yaml diff --git a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml new file mode 100644 index 000000000..5ece262b4 --- /dev/null +++ b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml @@ -0,0 +1,160 @@ +id: word-content-control-ondeleted-event +name: Delete content controls +description: Register and trigger onDeleted event to track the removal of content controls. +host: WORD +api_set: + WordApi: '1.4' +script: + content: | + $("#insert-content-controls").click(() => tryCatch(insertContentControls)); + $("#register-event-handlers").click(() => tryCatch(registerEventHandlers)); + $("#delete-content-control").click(() => tryCatch(deleteContentControl)); + $("#setup").click(() => tryCatch(setup)); + + async function insertContentControls() { + // Traverses each paragraph of the document and wraps a content control on each. + 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(); + contentControl.tag = "forTesting"; + } + + console.log("Content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); + } + + async function registerEventHandlers() { + await Word.run(async (context) => { + let 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++) { + contentControls.items[i].onDeleted.add(contentControlDeleted); + contentControls.items[i].track(); + } + + await context.sync(); + + console.log("Added event handlers for when content controls are deleted."); + } + }); + } + + async function contentControlDeleted(event: Word.ContentControlEventArgs) { + await Word.run(async (context) => { + // Display the deleted content control's ID. + console.log(`ID of content control that was deleted: ${event.contentControl.id}`); + }); + } + + async function deleteContentControl() { + await Word.run(async (context) => { + let 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(); + } + }); + } + + async function setup() { + await Word.run(async (context) => { + context.document.body.clear(); + context.document.body.insertParagraph("One more paragraph. ", "Start"); + context.document.body.insertParagraph("Inserting another paragraph. ", "Start"); + context.document.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" + ); + context.document.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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different 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 demonstrates how to use the onDeleted event on content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ Insert content controls. + + Register event handlers. + + Delete 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 2437f7e1a44665776b342da4101fc22c0d5d93ea..11964c7209c8200772169b3fcbc4e0030c03025d 100644 GIT binary patch delta 5485 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 Lu;XNl{#WoHY@t3z delta 5329 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 MaxfBRssBL!2OkL2{{R30 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7d7999de0..d0d11baf7 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10972,6 +10972,40 @@ console.log("No active comment was found in the selection so couldn't reply."); } }); +'Word.ContentControl#onDeleted:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + + await Word.run(async (context) => { + let 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++) { + 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/99-preview-apis/content-control-ondeleted-event.yaml + + async function contentControlDeleted(event: Word.ContentControlEventArgs) { + await Word.run(async (context) => { + // Display the deleted content control's ID. + console.log(`ID of content control that was deleted: ${event.contentControl.id}`); + }); + } 'Word.ContentControl#tag:member': - >- // Link to full sample: @@ -10999,6 +11033,25 @@ await context.sync(); }); +'Word.ContentControl#delete:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + + await Word.run(async (context) => { + let 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: @@ -11055,6 +11108,17 @@ await context.sync(); }); +'Word.ContentControlEventArgs#contentControl:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + + async function contentControlDeleted(event: Word.ContentControlEventArgs) { + await Word.run(async (context) => { + // Display the deleted content control's ID. + console.log(`ID of content control that was deleted: ${event.contentControl.id}`); + }); + } 'Word.CustomPropertyCollection#add:member(1)': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 8719f77b2..730605e4c 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -20,6 +20,7 @@ "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index f0d9ce979..d078b3e74 100644 --- a/view/word.json +++ b/view/word.json @@ -20,6 +20,7 @@ "word-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file From d1e3ddea15afb839cd4c4fed37f6f0c177a24918 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 7 Mar 2022 11:06:55 -0800 Subject: [PATCH 056/336] Remove duplicate sample mapping and fix comments (#602) --- .../pivottable-calculations.yaml | 14 +++--- .../pivottable-create-and-modify.yaml | 10 ++--- .../pivottable-filters-and-summaries.yaml | 16 +++---- .../pivottable-get-pivottables.yaml | 8 +++- snippet-extractor-metadata/excel.xlsx | Bin 25065 -> 25053 bytes snippet-extractor-output/snippets.yaml | 40 +++++------------- 6 files changed, 36 insertions(+), 52 deletions(-) diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index 0efe9bded..ba8886dd7 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -24,7 +24,7 @@ script: wholesaleDataHierarchy.load("showAs"); await context.sync(); - // show the crates of each fruit type sold at the farm as a percentage of the column's total + // Show the crates of each fruit type sold at the farm as a percentage of the column's total. let farmShowAs = farmDataHierarchy.showAs; farmShowAs.calculation = Excel.ShowAsCalculation.percentOfColumnTotal; farmShowAs.baseField = pivotTable.rowHierarchies.getItem("Type").fields.getItem("Type"); @@ -48,8 +48,8 @@ script: wholesaleDataHierarchy.load("showAs"); await context.sync(); - // show the difference between crate sales of the "A Farms" and the other farms - // this difference is both aggregated and shown for individual fruit types (where applicable) + // Show the difference between crate sales of the "A Farms" and the other farms. + // This difference is both aggregated and shown for individual fruit types (where applicable). let farmShowAs = farmDataHierarchy.showAs; farmShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; farmShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); @@ -75,7 +75,7 @@ script: wholesaleDataHierarchy.load("showAs"); await context.sync(); - // show the sum totals crates of each fruit type sold at the farm (the default behavior) + // Show the sum totals crates of each fruit type sold at the farm (the default behavior). let farmShowAs = farmDataHierarchy.showAs; farmShowAs.calculation = Excel.ShowAsCalculation.none; farmDataHierarchy.showAs = farmShowAs; @@ -89,13 +89,13 @@ script: async function setup() { await Excel.run(async (context) => { - // create the worksheets + // Create the worksheets. context.workbook.worksheets.getItemOrNullObject("Data").delete(); const dataSheet = context.workbook.worksheets.add("Data"); context.workbook.worksheets.getItemOrNullObject("Pivot").delete(); const pivotSheet = context.workbook.worksheets.add("Pivot"); - // create farm data + // Create farm data. const data = [["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"], ["A Farms", "Lime", "Organic", 300, 2000], ["A Farms", "Lemon", "Organic", 250, 1800], @@ -123,7 +123,7 @@ script: range.format.autofitColumns(); pivotSheet.activate(); - // create the PivotTable + // Create the PivotTable. context.workbook.worksheets.getActiveWorksheet() .pivotTables.add("Farm Sales", "Data!A1:E21", "A2"); const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index 1e2b8cd65..8ad09ddaf 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -40,7 +40,7 @@ script: await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - // check if the PivotTable already has rows + // Check if the PivotTable already has rows. const farmRow = pivotTable.rowHierarchies.getItemOrNullObject("Farm"); const typeRow = pivotTable.rowHierarchies.getItemOrNullObject("Type"); const classificationRow = pivotTable.rowHierarchies.getItemOrNullObject("Classification"); @@ -63,7 +63,7 @@ script: await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - // check if the PivotTable already has rows + // Check if the PivotTable already has rows. const farmRow = pivotTable.rowHierarchies.getItemOrNullObject("Farm"); const typeRow = pivotTable.rowHierarchies.getItemOrNullObject("Type"); const classificationRow = pivotTable.rowHierarchies.getItemOrNullObject("Classification"); @@ -86,13 +86,13 @@ script: await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - // check if the PivotTable already has a column + // Check if the PivotTable already has a column. const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); column.load("id"); await context.sync(); if (column.isNullObject) { - // adding the farm column to the column hierarchy automatically removes it from the row hierarchy + // Adding the farm column to the column hierarchy automatically removes it from the row hierarchy. pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); } else { pivotTable.columnHierarchies.remove(column); @@ -130,7 +130,7 @@ script: pivotTable.layout.load("layoutType"); await context.sync(); - // cycle between the three layout types + // Cycle between the three layout types. if (pivotTable.layout.layoutType === "Compact") { pivotTable.layout.layoutType = "Outline"; } else if (pivotTable.layout.layoutType === "Outline") { diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 5709b93d9..9430d6de1 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -26,7 +26,7 @@ script: filter.load(); await context.sync(); - // add the Classification hierarchy to the filter, if it's not already there + // 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(); @@ -66,15 +66,15 @@ script: await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - // the layout controls the ranges used by the PivotTable + // The layout controls the ranges used by the PivotTable. const range = pivotTable.layout.getDataBodyRange(); - // get all the data hierarchy totals + // 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 + // 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(); @@ -83,13 +83,13 @@ script: async function setup() { await Excel.run(async (context) => { - // create the worksheets + // Create the worksheets. context.workbook.worksheets.getItemOrNullObject("Data").delete(); const dataSheet = context.workbook.worksheets.add("Data"); context.workbook.worksheets.getItemOrNullObject("Pivot").delete(); const pivotSheet = context.workbook.worksheets.add("Pivot"); - // create farm data + // Create farm data. const data = [["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"], ["A Farms", "Lime", "Organic", 300, 2000], ["A Farms", "Lemon", "Organic", 250, 1800], @@ -117,7 +117,7 @@ script: range.format.autofitColumns(); pivotSheet.activate(); - // create the PivotTable + // Create the PivotTable. context.workbook.worksheets.getActiveWorksheet() .pivotTables.add("Farm Sales", "Data!A1:E21", "A2"); const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); @@ -134,7 +134,7 @@ script: await Excel.run(async (context) => { context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); - // also clean up the extra data from getCrateTotal() + // Also clean up the extra data from getCrateTotal(). context.workbook.worksheets.getActiveWorksheet().getRange("B27:C27").delete(Excel.DeleteShiftDirection.up); await context.sync(); }); diff --git a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml index 39205809e..23ac8032e 100644 --- a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml +++ b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -7,7 +7,11 @@ 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").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)); + async function getPivotTablesInWorkbook() { await Excel.run(async (context) => { // Get the names of all the PivotTables in the workbook. @@ -192,4 +196,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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index a28dd8dd6956dcd81a2611a75c8438428ba51b52..060df4926a6e9100cbe8e40048670ff7e145ca88 100644 GIT binary patch delta 15600 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 N3k?A5>HO#I{{cu|9?bv% delta 15646 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 { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - // the layout controls the ranges used by the PivotTable + // The layout controls the ranges used by the PivotTable. const range = pivotTable.layout.getDataBodyRange(); - // get all the data hierarchy totals + // 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(); - }); - - >- - // 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 + // 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(); @@ -3287,13 +3267,13 @@ await Excel.run(async (context) => { const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - // check if the PivotTable already has a column + // Check if the PivotTable already has a column. const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); column.load("id"); await context.sync(); if (column.isNullObject) { - // adding the farm column to the column hierarchy automatically removes it from the row hierarchy + // Adding the farm column to the column hierarchy automatically removes it from the row hierarchy. pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); } else { pivotTable.columnHierarchies.remove(column); @@ -3333,7 +3313,7 @@ pivotTable.layout.load("layoutType"); await context.sync(); - // cycle between the three layout types + // Cycle between the three layout types. if (pivotTable.layout.layoutType === "Compact") { pivotTable.layout.layoutType = "Outline"; } else if (pivotTable.layout.layoutType === "Outline") { @@ -3357,7 +3337,7 @@ filter.load(); await context.sync(); - // add the Classification hierarchy to the filter, if it's not already there + // 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(); @@ -4773,8 +4753,8 @@ wholesaleDataHierarchy.load("showAs"); await context.sync(); - // show the difference between crate sales of the "A Farms" and the other farms - // this difference is both aggregated and shown for individual fruit types (where applicable) + // Show the difference between crate sales of the "A Farms" and the other farms. + // This difference is both aggregated and shown for individual fruit types (where applicable). let farmShowAs = farmDataHierarchy.showAs; farmShowAs.calculation = Excel.ShowAsCalculation.differenceFrom; farmShowAs.baseField = pivotTable.rowHierarchies.getItem("Farm").fields.getItem("Farm"); From c7b5f04e1ffaa1388d5cc018ad3c0c97cf01dc68 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Mon, 7 Mar 2022 13:25:30 -0800 Subject: [PATCH 057/336] Adding top-level sample support for mapping (#603) --- config/build.documentation.ts | 13 +- .../10-chart/chart-create-several-charts.yaml | 349 +++++++++--------- snippet-extractor-metadata/excel.xlsx | Bin 25053 -> 25217 bytes snippet-extractor-output/snippets.yaml | 21 ++ 4 files changed, 204 insertions(+), 179 deletions(-) diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 213a1830c..84e355342 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -90,10 +90,17 @@ async function buildSnippetExtractsPerHost( .filter(item => item) .forEach((text, index) => { const row = lines[index]; - let fullName = `${hostName}.${row.class.trim()}#${row.member.trim()}:member`; - if (row.memberId) { - fullName += `(${row.memberId})`; + let fullName; + + if (row.member) { /* If the mapping is for a field */ + fullName = `${hostName}.${row.class.trim()}#${row.member.trim()}:member`; + if (row.memberId) { + fullName += `(${row.memberId})`; + } + } else { /* If the mapping is for a top-level sample (like an enum) */ + fullName = `${hostName}.${row.class.trim()}:${row.memberId.trim()}`; } + if (!allSnippetData[fullName]) { allSnippetData[fullName] = []; } diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index 9eb865bed..53ffff914 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -20,7 +20,7 @@ script: $("#create-bar-100-chart").click(() => tryCatch(createBar100Chart)); async function createColumnClusteredChart() { - await Excel.run(async (context) => { + await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); const salesTable = sheet.tables.getItem("SalesTable"); @@ -40,215 +40,212 @@ script: points.getItemAt(1).format.fill.setSolidColor("indigo"); await context.sync(); - }); + }); } async function createLineChart() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - let salesTable = sheet.tables.getItem("SalesTable"); - - let dataRange = sheet.getRange("A1:E7"); - let chart = sheet.charts.add("Line", dataRange, "Auto"); - - chart.setPosition("A22", "F35"); - chart.legend.position = "Right" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - chart.title.text = "Bicycle Parts Quarterly Sales"; - - await context.sync(); - }); + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:E7"); + let chart = sheet.charts.add(Excel.ChartType.line, dataRange, "Auto"); + + chart.setPosition("A22", "F35"); + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + chart.title.text = "Bicycle Parts Quarterly Sales"; + + await context.sync(); + }); } async function createXYScatterChart() { - await Excel.run(async (context) => { - let sheet = context.workbook.worksheets.getItem("Sample"); - let salesTable = sheet.tables.getItem("SalesTable"); + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); - let dataRange = sheet.getRange("A1:E7"); + let dataRange = sheet.getRange("A1:E7"); - // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatter", dataRange, "Auto"); - chart.title.text = "Bicycle Parts Quarterly Sales"; - chart.setPosition("A36", "F48"); + // Create an XY scatter chart. + let chart = sheet.charts.add(Excel.ChartType.xyscatter, dataRange, "Auto"); + chart.title.text = "Bicycle Parts Quarterly Sales"; + chart.setPosition("A36", "F48"); - await context.sync(); - }); + await context.sync(); + }); } async function createAreaStackedChart() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - let chart = sheet.charts.add("AreaStacked", dataRange, "Auto"); - - chart.setPosition("H1", "M15"); - chart.title.text = "Quarterly sales chart"; - chart.legend.position = "Bottom" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - chart.series.getItemAt(0).name = "Q1"; - chart.series.getItemAt(1).name = "Q2"; - chart.series.getItemAt(2).name = "Q3"; - chart.series.getItemAt(3).name = "Q4"; - - await context.sync(); - }); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + + let chart = sheet.charts.add(Excel.ChartType.areaStacked, dataRange, "Auto"); + + chart.setPosition("H1", "M15"); + chart.title.text = "Quarterly sales chart"; + chart.legend.position = "Bottom"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + chart.series.getItemAt(0).name = "Q1"; + chart.series.getItemAt(1).name = "Q2"; + chart.series.getItemAt(2).name = "Q3"; + chart.series.getItemAt(3).name = "Q4"; + + await context.sync(); + }); } async function createRadarFilledChart() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - let chart = sheet.charts.add("RadarFilled", dataRange, "Auto"); - - chart.setPosition("H17", "M35"); - chart.title.text = "Quarterly sales chart"; - chart.legend.position = "Bottom" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - chart.series.getItemAt(0).name = "Q1"; - chart.series.getItemAt(1).name = "Q2"; - chart.series.getItemAt(2).name = "Q3"; - chart.series.getItemAt(3).name = "Q4"; - - await context.sync(); - }); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + + let chart = sheet.charts.add(Excel.ChartType.radarFilled, dataRange, "Auto"); + + chart.setPosition("H17", "M35"); + chart.title.text = "Quarterly sales chart"; + chart.legend.position = "Bottom"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + chart.series.getItemAt(0).name = "Q1"; + chart.series.getItemAt(1).name = "Q2"; + chart.series.getItemAt(2).name = "Q3"; + chart.series.getItemAt(3).name = "Q4"; + + await context.sync(); + }); } async function createPieChart() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - let chart = sheet.charts.add("Pie", dataRange, "Auto"); - - chart.setPosition("H37", "M52"); - chart.title.text = "1st Quarter sales chart"; - chart.legend.position = "Bottom" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - - await context.sync(); - }); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + + let chart = sheet.charts.add("Pie", dataRange, "Auto"); + + chart.setPosition("H37", "M52"); + chart.title.text = "1st Quarter sales chart"; + chart.legend.position = "Bottom"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + + await context.sync(); + }); } async function create3DChart() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - let chart = sheet.charts.add("3DBarClustered", dataRange, "Auto"); - - chart.setPosition("O1", "T20"); - chart.title.text = "Quarterly sales chart"; - chart.legend.position = "Bottom" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - chart.series.getItemAt(0).name = "Q1"; - chart.series.getItemAt(1).name = "Q2"; - chart.series.getItemAt(2).name = "Q3"; - chart.series.getItemAt(3).name = "Q4"; - - await context.sync(); - }); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + + let chart = sheet.charts.add(Excel.ChartType._3DBarClustered, dataRange, "Auto"); + + chart.setPosition("O1", "T20"); + chart.title.text = "Quarterly sales chart"; + chart.legend.position = "Bottom"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + chart.series.getItemAt(0).name = "Q1"; + chart.series.getItemAt(1).name = "Q2"; + chart.series.getItemAt(2).name = "Q3"; + chart.series.getItemAt(3).name = "Q4"; + + await context.sync(); + }); } async function createCylinderChart() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - let chart = sheet.charts.add("CylinderCol", dataRange, "Auto"); - - chart.setPosition("O22", "T36"); - chart.title.text = "Quarterly sales chart"; - chart.legend.position = "Bottom" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - chart.series.getItemAt(0).name = "Q1"; - chart.series.getItemAt(1).name = "Q2"; - chart.series.getItemAt(2).name = "Q3"; - chart.series.getItemAt(3).name = "Q4"; - - await context.sync(); - }); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + + let chart = sheet.charts.add(Excel.ChartType.cylinderCol, dataRange, "Auto"); + + chart.setPosition("O22", "T36"); + chart.title.text = "Quarterly sales chart"; + chart.legend.position = "Bottom"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + chart.series.getItemAt(0).name = "Q1"; + chart.series.getItemAt(1).name = "Q2"; + chart.series.getItemAt(2).name = "Q3"; + chart.series.getItemAt(3).name = "Q4"; + + await context.sync(); + }); } async function createBar100Chart() { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const salesTable = sheet.tables.getItem("SalesTable"); - const dataRange = salesTable.getDataBodyRange(); - - let chart = sheet.charts.add("BarStacked100", dataRange, "Auto"); - - chart.setPosition("O38", "T50"); - chart.title.text = "Quarterly sales chart"; - chart.legend.position = "Bottom" - chart.legend.format.fill.setSolidColor("white"); - chart.dataLabels.format.font.size = 15; - chart.dataLabels.format.font.color = "black"; - chart.series.getItemAt(0).name = "Q1"; - chart.series.getItemAt(1).name = "Q2"; - chart.series.getItemAt(2).name = "Q3"; - chart.series.getItemAt(3).name = "Q4"; - - await context.sync(); - }); + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const salesTable = sheet.tables.getItem("SalesTable"); + const dataRange = salesTable.getDataBodyRange(); + + let chart = sheet.charts.add(Excel.ChartType.barStacked100, dataRange, "Auto"); + + chart.setPosition("O38", "T50"); + chart.title.text = "Quarterly sales chart"; + chart.legend.position = "Bottom"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + chart.series.getItemAt(0).name = "Q1"; + chart.series.getItemAt(1).name = "Q2"; + chart.series.getItemAt(2).name = "Q3"; + chart.series.getItemAt(3).name = "Q4"; + + await context.sync(); + }); } async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); - - let expensesTable = sheet.tables.add("A1:E1", true); - expensesTable.name = "SalesTable"; - expensesTable.getHeaderRowRange().values = [ - ["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"] - ]; - - expensesTable.rows.add(null, [ - ["Frames", 5000, 7000, 6544, 4377], - ["Saddles", 400, 323, 276, 651], - ["Brake levers", 12000, 8766, 8456, 9812], - ["Chains", 1550, 1088, 692, 853], - ["Mirrors", 225, 600, 923, 544], - ["Spokes", 6005, 7634, 4589, 8765] - ]); - - sheet.getUsedRange().format.autofitColumns(); - sheet.getUsedRange().format.autofitRows(); - - sheet.activate(); - await context.sync(); - }); + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + let expensesTable = sheet.tables.add("A1:E1", true); + expensesTable.name = "SalesTable"; + expensesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + + expensesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 4377], + ["Saddles", 400, 323, 276, 651], + ["Brake levers", 12000, 8766, 8456, 9812], + ["Chains", 1550, 1088, 692, 853], + ["Mirrors", 225, 600, 923, 544], + ["Spokes", 6005, 7634, 4589, 8765] + ]); + + 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); - } + 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: diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 060df4926a6e9100cbe8e40048670ff7e145ca88..854b3ff35789abe8da04ed4762cb450439165a5d 100644 GIT binary patch delta 15214 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 O#0CQrh%lZ182%5w3(X4v delta 15063 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 4406613f0..db6640e63 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1177,6 +1177,27 @@ console.log("The trendline color has been set to:" + line.color); }); +'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 + + await Excel.run(async (context) => { + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + + let dataRange = sheet.getRange("A1:E7"); + let chart = sheet.charts.add(Excel.ChartType.line, dataRange, "Auto"); + + chart.setPosition("A22", "F35"); + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + chart.dataLabels.format.font.size = 15; + chart.dataLabels.format.font.color = "black"; + chart.title.text = "Bicycle Parts Quarterly Sales"; + + await context.sync(); + }); 'Excel.ColorScaleConditionalFormat#criteria:member': - >- // Link to full sample: From f5bd471fd9561a83ca59e5630fb683562e08721f Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 7 Mar 2022 14:59:47 -0800 Subject: [PATCH 058/336] [Word] Add ChangeTracking snippet (#585) * [Word] Add ChangeTracking snippet * Tweak messages * Reorder options * run yarn start * Display current reviewed text as well * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback * Tweak Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 11 ++ playlists/word.yaml | 11 ++ .../manage-change-tracking.yaml | 154 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 14243 -> 14458 bytes snippet-extractor-output/snippets.yaml | 66 ++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 244 insertions(+) create mode 100644 samples/word/99-preview-apis/manage-change-tracking.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 34e0e4ba2..32be2fc87 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -202,6 +202,17 @@ group: Preview APIs api_set: WordApi: '1.4' +- id: word-manage-change-tracking + name: Track changes + fileName: manage-change-tracking.yaml + description: >- + This sample shows how to get and set the change tracking mode and get the + before and after of reviewed text. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + group: Preview APIs + api_set: + WordApi: '1.4' - id: word-manage-comments name: Comments fileName: manage-comments.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 612c9114f..ec9e52585 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -202,6 +202,17 @@ group: Preview APIs api_set: WordApi: '1.4' +- id: word-manage-change-tracking + name: Track changes + fileName: manage-change-tracking.yaml + description: >- + This sample shows how to get and set the change tracking mode and get the + before and after of reviewed text. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-change-tracking.yaml + group: Preview APIs + api_set: + WordApi: '1.4' - id: word-manage-comments name: Comments fileName: manage-comments.yaml diff --git a/samples/word/99-preview-apis/manage-change-tracking.yaml b/samples/word/99-preview-apis/manage-change-tracking.yaml new file mode 100644 index 000000000..3aba52cf8 --- /dev/null +++ b/samples/word/99-preview-apis/manage-change-tracking.yaml @@ -0,0 +1,154 @@ +id: word-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. +host: WORD +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 the current change tracking mode. */ + async function getChangeTrackingMode() { + 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."); + } + }); + } + + /** Set the change tracking mode. */ + async function setChangeTrackingMode() { + await Word.run(async (context) => { + const mode = $("input[name='mode']:checked").val(); + if (mode === "Track only my changes") { + context.document.changeTrackingMode = Word.ChangeTrackingMode.trackMineOnly; + } else if (mode === "Track everyone's changes") { + context.document.changeTrackingMode = Word.ChangeTrackingMode.trackAll; + } else { + context.document.changeTrackingMode = Word.ChangeTrackingMode.off; + } + + await context.sync(); + + getChangeTrackingMode(); + }); + } + + /** Get the reviewed text. */ + async function getReviewedText() { + await Word.run(async (context) => { + const range = context.document.getSelection(); + let before = range.getReviewedText(Word.ChangeTrackingVersion.original); + let after = range.getReviewedText(Word.ChangeTrackingVersion.current); + + await context.sync(); + + console.log(`Reviewed text (before):\n${before.value}`); + console.log(`Reviewed text (after):\n${after.value}`); + }); + } + + /** Set two paragraphs of sample text. */ + async function setup() { + await Word.run(async (context) => { + context.document.body.clear(); + context.document.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" + ); + context.document.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 basic operations of the Track Changes feature.

+
+ +
+

Set up

+ +
+ +
+

Try it out

+

Get current change tracking mode

+ +

Set change tracking mode

+

+ +
+ +
+ +
+ +

+

Get reviewed 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/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 11964c7209c8200772169b3fcbc4e0030c03025d..44ecbb444f528df827dee38755043cb08ce97518 100644 GIT binary patch delta 6434 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 NwbR*J8cU<51 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index db6640e63..98258b54f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10840,6 +10840,39 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); +'Word.ChangeTrackingMode:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + + 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.ChangeTrackingVersion:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + + await Word.run(async (context) => { + const range = context.document.getSelection(); + let before = range.getReviewedText(Word.ChangeTrackingVersion.original); + let after = range.getReviewedText(Word.ChangeTrackingVersion.current); + + await context.sync(); + + console.log(`Reviewed text (before):\n${before.value}`); + console.log(`Reviewed text (after):\n${after.value}`); + }); 'Word.Comment#delete:member(1)': - >- // Link to full sample: @@ -11154,6 +11187,24 @@ for (var 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.Document#changeTrackingMode:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + + 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#properties:member': - >- // Link to full sample: @@ -11476,6 +11527,21 @@ console.log("Comments:"); console.log(comments); }); +'Word.Range#getReviewedText:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + + await Word.run(async (context) => { + const range = context.document.getSelection(); + let before = range.getReviewedText(Word.ChangeTrackingVersion.original); + let after = range.getReviewedText(Word.ChangeTrackingVersion.current); + + await context.sync(); + + console.log(`Reviewed text (before):\n${before.value}`); + console.log(`Reviewed text (after):\n${after.value}`); + }); 'Word.Range#getTextRanges:member(1)': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 730605e4c..8b64e5c62 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -21,6 +21,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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", + "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index d078b3e74..3cc208fed 100644 --- a/view/word.json +++ b/view/word.json @@ -21,6 +21,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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", + "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-change-tracking.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file From 57cad57785c124642d0f47ac7ee1b67d3a241f88 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 10 Mar 2022 16:14:19 -0800 Subject: [PATCH 059/336] [Word] (content control) Add how to deregister onDeleted event (#605) * [Word] (content control) Add how to deregister onDeleted event * Update based on feedback --- playlists-prod/word.yaml | 4 +- playlists/word.yaml | 4 +- .../content-control-ondeleted-event.yaml | 40 ++++++++++++++----- snippet-extractor-output/snippets.yaml | 6 +-- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 32be2fc87..a396212b6 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -195,8 +195,8 @@ name: Delete content controls fileName: content-control-ondeleted-event.yaml description: >- - Register and trigger onDeleted event to track the removal of content - controls. + Register, trigger, and deregister onDeleted event that tracks the removal of + content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml group: Preview APIs diff --git a/playlists/word.yaml b/playlists/word.yaml index ec9e52585..4abceed7e 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -195,8 +195,8 @@ name: Delete content controls fileName: content-control-ondeleted-event.yaml description: >- - Register and trigger onDeleted event to track the removal of content - controls. + Register, trigger, and deregister onDeleted event that tracks the removal of + content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml group: Preview APIs 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 5ece262b4..ef9f6c580 100644 --- a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml +++ b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml @@ -1,6 +1,6 @@ id: word-content-control-ondeleted-event name: Delete content controls -description: Register and trigger onDeleted event to track the removal of content controls. +description: 'Register, trigger, and deregister onDeleted event that tracks the removal of content controls.' host: WORD api_set: WordApi: '1.4' @@ -9,8 +9,11 @@ script: $("#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)); + let eventContexts = []; + async function insertContentControls() { // Traverses each paragraph of the document and wraps a content control on each. await Word.run(async (context) => { @@ -41,7 +44,7 @@ script: 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++) { - contentControls.items[i].onDeleted.add(contentControlDeleted); + eventContexts[i] = contentControls.items[i].onDeleted.add(contentControlDeleted); contentControls.items[i].track(); } @@ -55,7 +58,7 @@ script: async function contentControlDeleted(event: Word.ContentControlEventArgs) { await Word.run(async (context) => { // Display the deleted content control's ID. - console.log(`ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`Event detected: ID of content control that was deleted: ${event.contentControl.id}`); }); } @@ -76,6 +79,21 @@ script: }); } + async function deregisterEventHandlers() { + 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 = null; + console.log("Removed event handlers for when content controls are deleted."); + }); + } + async function setup() { await Word.run(async (context) => { context.document.body.clear(); @@ -113,7 +131,7 @@ template:

Set up

@@ -121,16 +139,20 @@ template:

Try it out

Insert content controls. - Register event handlers. + Insert + + Register event handlers. - Delete first content control. - + Remove event handlers. + language: html style: diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 98258b54f..dc67572d5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11021,7 +11021,7 @@ 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++) { - contentControls.items[i].onDeleted.add(contentControlDeleted); + eventContexts[i] = contentControls.items[i].onDeleted.add(contentControlDeleted); contentControls.items[i].track(); } @@ -11037,7 +11037,7 @@ async function contentControlDeleted(event: Word.ContentControlEventArgs) { await Word.run(async (context) => { // Display the deleted content control's ID. - console.log(`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(`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)': From ae96055ee57efdb11e4785215c070fbf4e744d74 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 11 Mar 2022 09:00:33 -0800 Subject: [PATCH 060/336] [Word] Map snippet for Word.Style enum (#607) --- .../content-control-ondeleted-event.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 14458 -> 14548 bytes snippet-extractor-output/snippets.yaml | 20 ++++++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) 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 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index dc67572d5..3c246485d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -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)': From 2ab103c3f9f4e0cd4f37085ea268fcbf155fe116 Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Sat, 12 Mar 2022 16:39:04 -0800 Subject: [PATCH 061/336] moves GAed samples out of preview section of PPT --- playlists-prod/powerpoint.yaml | 38 +++++++++---------- playlists/powerpoint.yaml | 36 +++++++++--------- .../add-slides.yaml | 4 +- .../{preview-apis => tags}/tags.yaml | 6 +-- snippet-extractor-output/snippets.yaml | 14 +++---- view-prod/powerpoint.json | 6 +-- view/powerpoint.json | 6 +-- 7 files changed, 55 insertions(+), 55 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/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 3c246485d..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; 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 311367372e07d95c03cd3c3b32f390bcdf8dc1e9 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 15 Mar 2022 15:14:57 -0700 Subject: [PATCH 062/336] [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 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 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 b60319cae151bfe39e8017a97ee214352c76ebd3 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 16 Mar 2022 11:12:38 -0700 Subject: [PATCH 063/336] [Excel] (Range) Add preview snippet for Range.dependents (#610) * [Excel] (Range) Add preview snippet for Range.dependents * Update excel.xlsx * Run yarn start * Get up to date version of excel.xlsx * Re-run yarn start * Update comments and order number * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 11 ++ playlists/excel.yaml | 11 ++ .../85-preview-apis/range-dependents.yaml | 177 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 25217 -> 25306 bytes snippet-extractor-output/snippets.yaml | 26 +++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 227 insertions(+) create mode 100644 samples/excel/85-preview-apis/range-dependents.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 26a22d9be..2fe9d9474 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1138,6 +1138,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-range-dependents + name: Dependents + fileName: range-dependents.yaml + description: >- + This sample shows how to find and highlight the dependents of the currently + selected cell. Dependent cells contain formulas that refer to other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 10cfab696..ca07a5c5d 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1138,6 +1138,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-range-dependents + name: Dependents + fileName: range-dependents.yaml + description: >- + This sample shows how to find and highlight the dependents of the currently + selected cell. Dependent cells contain formulas that refer to other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/range-dependents.yaml b/samples/excel/85-preview-apis/range-dependents.yaml new file mode 100644 index 000000000..71031dcaa --- /dev/null +++ b/samples/excel/85-preview-apis/range-dependents.yaml @@ -0,0 +1,177 @@ +order: 3 +id: excel-range-dependents +name: Dependents +description: This sample shows how to find and highlight the dependents of the currently selected cell. Dependent cells contain formulas that refer to other cells. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#select-D3").click(() => tryCatch(selectD3)); + $("#get-all-dependents").click(() => tryCatch(getAllDependents)); + $("#clear-highlighting").click(() => tryCatch(clearFormatting)); + + async function selectD3() { + await Excel.run(async (context) => { + // This method selects a cell with dependents across both worksheets. + + // Activate the sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample2019Data"); + sheet.activate(); + + // Select cell D3. + const range = sheet.getRange("D3"); + range.select(); + await context.sync(); + }); + } + + async function getAllDependents() { + await Excel.run(async (context) => { + // This method highlights all the dependent cells of the active cell. + // Dependent cells contain formulas that refer to other cells. + + // 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(); + }); + } + + async function clearFormatting() { + await Excel.run(async (context) => { + // This method removes highlighting from dependent cells. + + const sheet1 = context.workbook.worksheets.getItem("Sample2019Data"); + const range1 = sheet1.getRange("B3:E5"); + range1.format.fill.clear(); + + const sheet2 = context.workbook.worksheets.getItem("Sample2020Data"); + const range2 = sheet2.getRange("B3:F5"); + range2.format.fill.clear(); + + await context.sync(); + }); + } + + /** Create two sample tables on different worksheets, with functions that span the tables. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample2019Data").delete(); + context.workbook.worksheets.getItemOrNullObject("Sample2020Data").delete(); + + // Set up the first sample table. + const sheet1 = context.workbook.worksheets.add("Sample2019Data"); + const data1 = [ + ["Product", "Qty", "Unit Price", "Total Price 2019"], + ["Almonds", 2, 7.5, "=C3 * D3"], + ["Coffee", 1, 34.5, "=C4 * D4"], + ["Chocolate", 5, 9.56, "=C5 * D5"] + ]; + + const range1 = sheet1.getRange("B2:E5"); + range1.values = data1; + range1.format.autofitColumns(); + + // Set up the second sample table. + const sheet2 = context.workbook.worksheets.add("Sample2020Data"); + const data2 = [ + ["Product", "Qty", "Unit Price", "Total Price 2020", "Average Annual Price"], + ["Almonds", 2, 8.0, "=C3 * D3", "=Sample2019Data!E3 + E3 / 2"], + ["Coffee", 1, 36.5, "=C4 * D4", "=Sample2019Data!E4 + E4 / 2"], + ["Chocolate", 5, 11.2, "=C5 * D5", "=Sample2019Data!E5 + E5 / 2"] + ]; + + const range2 = sheet2.getRange("B2:F5"); + range2.values = data2; + range2.format.autofitColumns(); + + // Style the tables. + const header1 = range1.getRow(0); + header1.format.fill.color = "#4472C4"; + header1.format.font.color = "white"; + + const header2 = range2.getRow(0); + header2.format.fill.color = "#4472C4"; + header2.format.font.color = "white"; + + sheet2.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 find and highlight the dependents of the currently selected cell.

+

Dependent cells contain formulas that refer to other cells.

+
+
+

Set up

+ +
+
+

Try it out

+

Cell D3 has dependents across worksheets.

+ + + +
+ 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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 854b3ff35789abe8da04ed4762cb450439165a5d..19fdc80686f1fcb0527e039e7da150956d988311 100644 GIT binary patch delta 16866 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 delta 16672 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 a?`UW5L~rEc- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml + + await Excel.run(async (context) => { + // This method highlights all the dependent cells of the active cell. + // Dependent cells contain formulas that refer to other cells. + + // 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#sort:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index e2b9ee959..5352ec291 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -119,6 +119,7 @@ "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml", + "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 784bc2b73..c510cfe3d 100644 --- a/view/excel.json +++ b/view/excel.json @@ -119,6 +119,7 @@ "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml", + "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From ab49e4f85a7680ff11b501ff1d96b3599753fddf Mon Sep 17 00:00:00 2001 From: Jakob Nielsen-MSFT Date: Fri, 25 Mar 2022 14:40:24 -0700 Subject: [PATCH 064/336] Added Data Types: Error values and Entity from table samples (#614) * Added Data Types: Error Values sample * Added Data Types: Entity Values sample * Updated Excel playlist * Renamed excel-data-types-entity-value-from-table snippet --- playlists-prod/excel.yaml | 18 + playlists/excel.yaml | 18 + .../data-types-entity-values-from-table.yaml | 1753 +++++++++++++++++ .../data-types-error-values.yaml | 97 + view-prod/excel.json | 2 + view/excel.json | 2 + 6 files changed, 1890 insertions(+) create mode 100644 samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml create mode 100644 samples/excel/85-preview-apis/data-types-error-values.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 2fe9d9474..1db593e1e 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1138,6 +1138,15 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-entity-values-from-table + name: 'Data types: Create entity values from data in a table' + fileName: data-types-entity-values-from-table.yaml + description: Demonstrates how to create entity values for each row in a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-range-dependents name: Dependents fileName: range-dependents.yaml @@ -1149,6 +1158,15 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-error-values + name: 'Data types: Set error values' + fileName: data-types-error-values.yaml + description: Demonstrates how to set a cell value to an error data type. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index ca07a5c5d..75d23b066 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1138,6 +1138,15 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-entity-values-from-table + name: 'Data types: Create entity values from data in a table' + fileName: data-types-entity-values-from-table.yaml + description: Demonstrates how to create entity values for each row in a table. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-range-dependents name: Dependents fileName: range-dependents.yaml @@ -1149,6 +1158,15 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-error-values + name: 'Data types: Set error values' + fileName: data-types-error-values.yaml + description: Demonstrates how to set a cell value to an error data type. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml b/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml new file mode 100644 index 000000000..9006efe14 --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml @@ -0,0 +1,1753 @@ +order: 3 +id: excel-data-types-entity-values-from-table +name: 'Data types: Create entity values from data in a table' +description: Demonstrates how to create entity values for each row in a table. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: |- + $("#setup").click(() => tryCatch(setup)); + $("#run").click(() => tryCatch(run)); + + async function run() { + await Excel.run(async (context) => { + const productsTable = context.workbook.tables.getItem("ProductsTable"); + + // Add a new column to the table for the entity values + productsTable.columns.getItemOrNullObject("Product").delete(); + const productColumn = productsTable.columns.add(0, null, "Product"); + + // Get product data from table + const dataRange = productsTable.getDataBodyRange(); + dataRange.load("values"); + + await context.sync(); + + // Add product entities to table + const entities = dataRange.values.map((rowValues) => { + // Get addtional product properties + const product = getProduct(rowValues[1]); + // Get category properties + const category = product ? getCategory(product.categoryID) : null; + // Get supplier properties + const supplier = product ? getSupplier(product.supplierID) : null; + // Return the entity + return [makeProductEntity(rowValues[1], rowValues[2], product, category, supplier)]; + }); + productColumn.getDataBodyRange().valuesAsJson = entities; + + productColumn.getRange().format.autofitColumns(); + + await context.sync(); + }); + } + + /** Get product properties */ + function getProduct(productID: number): any { + return products.find((p) => p.productID == productID); + } + + /** Get category properties */ + function getCategory(categoryID: number): any { + return categories.find((c) => c.categoryID == categoryID); + } + + /** Get supplier properties */ + function getSupplier(supplierID: number): any { + return suppliers.find((s) => s.supplierID == supplierID); + } + + /** Make entity from product properties */ + function makeProductEntity( + productID: number, + productName: string, + product?: any, + category?: any, + supplier?: any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { + "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" + }, + // Add Units In Store as a formatted number + "Units In Stock": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitsInStore, + numberFormat: "#,##0" + }, + // Add Units On Order as a formatted number + "Units On Order": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.unitsOnOrder, + numberFormat: "#,##0" + }, + // Add Reorder Level as a formatted number + "Reorder Level": { + type: Excel.CellValueType.formattedNumber, + basicValue: product.reorderLevel, + numberFormat: "#,##0" + }, + Discontinued: { + type: Excel.CellValueType.boolean, + basicValue: product.discontinued || false + } + }, + layouts: { + card: { + title: { property: "Product Name" }, + sections: [ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + }, + { + layout: "List", + title: "Inventory", + collapsible: true, + collapsed: true, + properties: ["Units In Stock", "Units On Order", "Reorder Level"] + }, + { + layout: "List", + title: "Additional information", + collapsed: true, + properties: ["Discontinued"] + } + ] + } + } + }; + + // Add image property to the entity and the card layout + if (product.productImage) { + entity.properties["Image"] = { + type: Excel.CellValueType.webImage, + address: product.productImage || "" + }; + entity.layouts.card.mainImage = { property: "Image" }; + } + + // Add a nested entity for the product category + if (category) { + entity.properties["Category"] = { + type: Excel.CellValueType.entity, + text: category.categoryName, + properties: { + "Category ID": { + type: Excel.CellValueType.double, + basicValue: category.categoryID, + propertyMetadata: { + // Exclude the category ID property from the card view and auto complete + excludeFrom: { + cardView: true, + autoComplete: true + } + } + }, + "Category Name": { + type: Excel.CellValueType.string, + basicValue: category.categoryName || "" + }, + "Description": { + type: Excel.CellValueType.string, + basicValue: category.description || "" + } + } + }; + // Add Category to the card layout + entity.layouts.card.sections[0].properties.push("Category"); + } + + // Add a nested entity for the supplier + if (supplier) { + entity.properties["Supplier"] = { + type: Excel.CellValueType.entity, + text: supplier.companyName, + properties: { + "Supplier ID": { + type: Excel.CellValueType.double, + basicValue: supplier.supplierID, + }, + "Company Name": { + type: Excel.CellValueType.string, + basicValue: supplier.companyName || "" + }, + "Contact Name": { + type: Excel.CellValueType.string, + basicValue: supplier.contactName || "" + }, + "Contact Title": { + type: Excel.CellValueType.string, + basicValue: supplier.contactTitle || "" + }, + "Address": { + type: Excel.CellValueType.string, + basicValue: supplier.address || "" + }, + "City": { + type: Excel.CellValueType.string, + basicValue: supplier.city || "" + }, + "Region": { + type: Excel.CellValueType.string, + basicValue: supplier.region || "" + }, + "Postal Code": { + type: Excel.CellValueType.string, + basicValue: supplier.postalCode || "" + }, + "Country": { + type: Excel.CellValueType.string, + basicValue: supplier.country || "" + }, + "Phone": { + type: Excel.CellValueType.string, + basicValue: supplier.phone || "" + }, + }, + layouts: { + card: { + title: { property: "Company Name" }, + sections: [ + { + layout: "List", + properties: [ + "Supplier ID", + "Company Name", + "Contact Name", + "Contact Title", + "Address", + "City", + "Region", + "Postal Code", + "Country", + "Phone", + ] + }, + ] + } + } + }; + // Add Supplier to the card layout + entity.layouts.card.sections[2].properties.push("Supplier"); + } + return entity; + } + + /** Setup worksheet */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const productsTable = sheet.tables.add("A1:C1", true /*hasHeaders*/); + productsTable.name = "ProductsTable"; + + productsTable.getHeaderRowRange().values = [["Product", "ProductID", "ProductName"]]; + + productsTable.rows.add( + null /*add at the end*/, + products.map((p) => [null, p.productID, p.productName]) + ); + + 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); + } + } + + /** Sample data */ + const products = [ + { + productID: 1, + productName: "Chai", + supplierID: 1, + categoryID: 1, + quantityPerUnit: "10 boxes x 20 bags", + unitPrice: 18, + unitsInStore: 39, + unitsOnOrder: 0, + reorderLevel: 10, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Masala_Chai.JPG/320px-Masala_Chai.JPG" + }, + { + productID: 2, + productName: "Chang", + supplierID: 1, + categoryID: 1, + quantityPerUnit: "24 - 12 oz bottles", + unitPrice: 19, + unitsInStore: 17, + unitsOnOrder: 40, + reorderLevel: 25, + discontinued: false, + productImage: "" + }, + { + productID: 3, + productName: "Aniseed Syrup", + supplierID: 1, + categoryID: 2, + quantityPerUnit: "12 - 550 ml bottles", + unitPrice: 10, + unitsInStore: 13, + unitsOnOrder: 70, + reorderLevel: 25, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Maltose_syrup.jpg/185px-Maltose_syrup.jpg" + }, + { + productID: 4, + productName: "Chef Anton's Cajun Seasoning", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "48 - 6 oz jars", + unitPrice: 22, + unitsInStore: 53, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Kruidenmengeling-spice.jpg/193px-Kruidenmengeling-spice.jpg" + }, + { + productID: 5, + productName: "Chef Anton's Gumbo Mix", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "36 boxes", + unitPrice: 21.35, + unitsInStore: 0, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Okra_in_a_Bowl_%28Unsplash%29.jpg/180px-Okra_in_a_Bowl_%28Unsplash%29.jpg" + }, + { + productID: 6, + productName: "Grandma's Boysenberry Spread", + supplierID: 3, + categoryID: 2, + quantityPerUnit: "12 - 8 oz jars", + unitPrice: 25, + unitsInStore: 120, + unitsOnOrder: 0, + reorderLevel: 25, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Making_cranberry_sauce_-_in_the_jar.jpg/90px-Making_cranberry_sauce_-_in_the_jar.jpg" + }, + { + productID: 7, + productName: "Uncle Bob's Organic Dried Pears", + supplierID: 3, + categoryID: 7, + quantityPerUnit: "12 - 1 lb pkgs.", + unitPrice: 30, + unitsInStore: 15, + unitsOnOrder: 0, + reorderLevel: 10, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/DriedPears.JPG/120px-DriedPears.JPG" + }, + { + productID: 8, + productName: "Northwoods Cranberry Sauce", + supplierID: 3, + categoryID: 2, + quantityPerUnit: "12 - 12 oz jars", + unitPrice: 40, + unitsInStore: 6, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Making_cranberry_sauce_-_stovetop.jpg/90px-Making_cranberry_sauce_-_stovetop.jpg" + }, + { + productID: 9, + productName: "Mishi Kobe Niku", + supplierID: 4, + categoryID: 6, + quantityPerUnit: "18 - 500 g pkgs.", + unitPrice: 97, + unitsInStore: 29, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: "" + }, + { + productID: 10, + productName: "Ikura", + supplierID: 4, + categoryID: 8, + quantityPerUnit: "12 - 200 ml jars", + unitPrice: 31, + unitsInStore: 31, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 11, + productName: "Queso Cabrales", + supplierID: 5, + categoryID: 4, + quantityPerUnit: "1 kg pkg.", + unitPrice: 21, + unitsInStore: 22, + unitsOnOrder: 30, + reorderLevel: 30, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Tilsit_cheese.jpg/190px-Tilsit_cheese.jpg" + }, + { + productID: 12, + productName: "Queso Manchego La Pastora", + supplierID: 5, + categoryID: 4, + quantityPerUnit: "10 - 500 g pkgs.", + unitPrice: 38, + unitsInStore: 86, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Manchego.jpg/177px-Manchego.jpg" + }, + { + productID: 13, + productName: "Konbu", + supplierID: 6, + categoryID: 8, + quantityPerUnit: "2 kg box", + unitPrice: 6, + unitsInStore: 24, + unitsOnOrder: 0, + reorderLevel: 5, + discontinued: false, + productImage: "" + }, + { + productID: 14, + productName: "Tofu", + supplierID: 6, + categoryID: 7, + quantityPerUnit: "40 - 100 g pkgs.", + unitPrice: 23.25, + unitsInStore: 35, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Korean.food-Dubu.gui-01.jpg/120px-Korean.food-Dubu.gui-01.jpg" + }, + { + productID: 15, + productName: "Genen Shouyu", + supplierID: 6, + categoryID: 2, + quantityPerUnit: "24 - 250 ml bottles", + unitPrice: 15.5, + unitsInStore: 39, + unitsOnOrder: 0, + reorderLevel: 5, + discontinued: false, + productImage: "" + }, + { + productID: 16, + productName: "Pavlova", + supplierID: 7, + categoryID: 3, + quantityPerUnit: "32 - 500 g boxes", + unitPrice: 17.45, + unitsInStore: 29, + unitsOnOrder: 0, + reorderLevel: 10, + discontinued: false, + productImage: "" + }, + { + productID: 17, + productName: "Alice Mutton", + supplierID: 7, + categoryID: 6, + quantityPerUnit: "20 - 1 kg tins", + unitPrice: 39, + unitsInStore: 0, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: "" + }, + { + productID: 18, + productName: "Carnarvon Tigers", + supplierID: 7, + categoryID: 8, + quantityPerUnit: "16 kg pkg.", + unitPrice: 62.5, + unitsInStore: 42, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 19, + productName: "Teatime Chocolate Biscuits", + supplierID: 8, + categoryID: 3, + quantityPerUnit: "10 boxes x 12 pieces", + unitPrice: 9.2, + unitsInStore: 25, + unitsOnOrder: 0, + reorderLevel: 5, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Macau_Koi_Kei_Bakery_Almond_Biscuits_2.JPG/120px-Macau_Koi_Kei_Bakery_Almond_Biscuits_2.JPG" + }, + { + productID: 20, + productName: "Sir Rodney's Marmalade", + supplierID: 8, + categoryID: 3, + quantityPerUnit: "30 gift boxes", + unitPrice: 81, + unitsInStore: 40, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Homemade_marmalade%2C_England.jpg/135px-Homemade_marmalade%2C_England.jpg" + }, + { + productID: 21, + productName: "Sir Rodney's Scones", + supplierID: 8, + categoryID: 3, + quantityPerUnit: "24 pkgs. x 4 pieces", + unitPrice: 10, + unitsInStore: 3, + unitsOnOrder: 40, + reorderLevel: 5, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Factura_membrillo.jpg/190px-Factura_membrillo.jpg" + }, + { + productID: 22, + productName: "Gustaf's Knäckebröd", + supplierID: 9, + categoryID: 5, + quantityPerUnit: "24 - 500 g pkgs.", + unitPrice: 21, + unitsInStore: 104, + unitsOnOrder: 0, + reorderLevel: 25, + discontinued: false, + productImage: "" + }, + { + productID: 23, + productName: "Tunnbröd", + supplierID: 9, + categoryID: 5, + quantityPerUnit: "12 - 250 g pkgs.", + unitPrice: 9, + unitsInStore: 61, + unitsOnOrder: 0, + reorderLevel: 25, + discontinued: false, + productImage: "" + }, + { + productID: 24, + productName: "Guaraná Fantástica", + supplierID: 10, + categoryID: 1, + quantityPerUnit: "12 - 355 ml cans", + unitPrice: 4.5, + unitsInStore: 20, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: "" + }, + { + productID: 25, + productName: "NuNuCa Nuß-Nougat-Creme", + supplierID: 11, + categoryID: 3, + quantityPerUnit: "20 - 450 g glasses", + unitPrice: 14, + unitsInStore: 76, + unitsOnOrder: 0, + reorderLevel: 30, + discontinued: false, + productImage: "" + }, + { + productID: 26, + productName: "Gumbär Gummibärchen", + supplierID: 11, + categoryID: 3, + quantityPerUnit: "100 - 250 g bags", + unitPrice: 31.23, + unitsInStore: 15, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 27, + productName: "Schoggi Schokolade", + supplierID: 11, + categoryID: 3, + quantityPerUnit: "100 - 100 g pieces", + unitPrice: 43.9, + unitsInStore: 49, + unitsOnOrder: 0, + reorderLevel: 30, + discontinued: false, + productImage: "" + }, + { + productID: 28, + productName: "Rössle Sauerkraut", + supplierID: 12, + categoryID: 7, + quantityPerUnit: "25 - 825 g cans", + unitPrice: 45.6, + unitsInStore: 26, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: "https://th.bing.com/th/id/OIP.w9WSAKPISXlOtxZr6E_ErgAAAA?w=118&h=180&c=7&o=5&dpr=1.5&pid=1.7" + }, + { + productID: 29, + productName: "Thüringer Rostbratwurst", + supplierID: 12, + categoryID: 6, + quantityPerUnit: "50 bags x 30 sausgs.", + unitPrice: 123.79, + unitsInStore: 0, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Rote_Bratw%C3%BCrste_auf_einem_Grillrost.JPG/220px-Rote_Bratw%C3%BCrste_auf_einem_Grillrost.JPG" + }, + { + productID: 30, + productName: "Nord-Ost Matjeshering", + supplierID: 13, + categoryID: 8, + quantityPerUnit: "10 - 200 g glasses", + unitPrice: 25.89, + unitsInStore: 10, + unitsOnOrder: 0, + reorderLevel: 15, + discontinued: false, + productImage: "" + }, + { + productID: 31, + productName: "Gorgonzola Telino", + supplierID: 14, + categoryID: 4, + quantityPerUnit: "12 - 100 g pkgs", + unitPrice: 12.5, + unitsInStore: 0, + unitsOnOrder: 70, + reorderLevel: 20, + discontinued: false, + productImage: "https://th.bing.com/th/id/OIP.L8uKB_VBE4XT-31q4roMiQAAAA?w=135&h=154&c=7&o=5&dpr=1.5&pid=1.7" + }, + { + productID: 32, + productName: "Mascarpone Fabioli", + supplierID: 14, + categoryID: 4, + quantityPerUnit: "24 - 200 g pkgs.", + unitPrice: 32, + unitsInStore: 9, + unitsOnOrder: 40, + reorderLevel: 25, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Mascarpone_2.jpg/220px-Mascarpone_2.jpg" + }, + { + productID: 33, + productName: "Geitost", + supplierID: 15, + categoryID: 4, + quantityPerUnit: "500 g", + unitPrice: 2.5, + unitsInStore: 112, + unitsOnOrder: 0, + reorderLevel: 20, + discontinued: false, + productImage: "" + }, + { + productID: 34, + productName: "Sasquatch Ale", + supplierID: 16, + categoryID: 1, + quantityPerUnit: "24 - 12 oz bottles", + unitPrice: 14, + unitsInStore: 111, + unitsOnOrder: 0, + reorderLevel: 15, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Hefeweizen_Glass.jpg/330px-Hefeweizen_Glass.jpg" + }, + { + productID: 35, + productName: "Steeleye Stout", + supplierID: 16, + categoryID: 1, + quantityPerUnit: "24 - 12 oz bottles", + unitPrice: 18, + unitsInStore: 20, + unitsOnOrder: 0, + reorderLevel: 15, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Weizenbier.jpg/150px-Weizenbier.jpg" + }, + { + productID: 36, + productName: "Inlagd Sill", + supplierID: 17, + categoryID: 8, + quantityPerUnit: "24 - 250 g jars", + unitPrice: 19, + unitsInStore: 112, + unitsOnOrder: 0, + reorderLevel: 20, + discontinued: false, + productImage: "" + }, + { + productID: 37, + productName: "Gravad lax", + supplierID: 17, + categoryID: 8, + quantityPerUnit: "12 - 500 g pkgs.", + unitPrice: 26, + unitsInStore: 11, + unitsOnOrder: 50, + reorderLevel: 25, + discontinued: false, + productImage: "" + }, + { + productID: 38, + productName: "Côte de Blaye", + supplierID: 18, + categoryID: 1, + quantityPerUnit: "12 - 75 cl bottles", + unitPrice: 263.5, + unitsInStore: 17, + unitsOnOrder: 0, + reorderLevel: 15, + discontinued: false, + productImage: "" + }, + { + productID: 39, + productName: "Chartreuse verte", + supplierID: 18, + categoryID: 1, + quantityPerUnit: "750 cc per bottle", + unitPrice: 18, + unitsInStore: 69, + unitsOnOrder: 0, + reorderLevel: 5, + discontinued: false, + productImage: "" + }, + { + productID: 40, + productName: "Boston Crab Meat", + supplierID: 19, + categoryID: 8, + quantityPerUnit: "24 - 4 oz tins", + unitPrice: 18.4, + unitsInStore: 123, + unitsOnOrder: 0, + reorderLevel: 30, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Kanikama.jpg/220px-Kanikama.jpg" + }, + { + productID: 41, + productName: "Jack's New England Clam Chowder", + supplierID: 19, + categoryID: 8, + quantityPerUnit: "12 - 12 oz cans", + unitPrice: 9.65, + unitsInStore: 85, + unitsOnOrder: 0, + reorderLevel: 10, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/Quail_07_bg_041506.jpg/300px-Quail_07_bg_041506.jpg" + }, + { + productID: 42, + productName: "Singaporean Hokkien Fried Mee", + supplierID: 20, + categoryID: 5, + quantityPerUnit: "32 - 1 kg pkgs.", + unitPrice: 14, + unitsInStore: 26, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: "" + }, + { + productID: 43, + productName: "Ipoh Coffee", + supplierID: 20, + categoryID: 1, + quantityPerUnit: "16 - 500 g tins", + unitPrice: 46, + unitsInStore: 17, + unitsOnOrder: 10, + reorderLevel: 25, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Dark_roasted_espresso_blend_coffee_beans_2.jpg/200px-Dark_roasted_espresso_blend_coffee_beans_2.jpg" + }, + { + productID: 44, + productName: "Gula Malacca", + supplierID: 20, + categoryID: 2, + quantityPerUnit: "20 - 2 kg bags", + unitPrice: 19.45, + unitsInStore: 27, + unitsOnOrder: 0, + reorderLevel: 15, + discontinued: false, + productImage: "" + }, + { + productID: 45, + productName: "Rogede sild", + supplierID: 21, + categoryID: 8, + quantityPerUnit: "1k pkg.", + unitPrice: 9.5, + unitsInStore: 5, + unitsOnOrder: 70, + reorderLevel: 15, + discontinued: false, + productImage: "" + }, + { + productID: 46, + productName: "Spegesild", + supplierID: 21, + categoryID: 8, + quantityPerUnit: "4 - 450 g glasses", + unitPrice: 12, + unitsInStore: 95, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 47, + productName: "Zaanse koeken", + supplierID: 22, + categoryID: 3, + quantityPerUnit: "10 - 4 oz boxes", + unitPrice: 9.5, + unitsInStore: 36, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 48, + productName: "Chocolade", + supplierID: 22, + categoryID: 3, + quantityPerUnit: "10 pkgs.", + unitPrice: 12.75, + unitsInStore: 15, + unitsOnOrder: 70, + reorderLevel: 25, + discontinued: false, + productImage: "" + }, + { + productID: 49, + productName: "Maxilaku", + supplierID: 23, + categoryID: 3, + quantityPerUnit: "24 - 50 g pkgs.", + unitPrice: 20, + unitsInStore: 10, + unitsOnOrder: 60, + reorderLevel: 15, + discontinued: false, + productImage: "" + }, + { + productID: 50, + productName: "Valkoinen suklaa", + supplierID: 23, + categoryID: 3, + quantityPerUnit: "12 - 100 g bars", + unitPrice: 16.25, + unitsInStore: 65, + unitsOnOrder: 0, + reorderLevel: 30, + discontinued: false, + productImage: "" + }, + { + productID: 51, + productName: "Manjimup Dried Apples", + supplierID: 24, + categoryID: 7, + quantityPerUnit: "50 - 300 g pkgs.", + unitPrice: 53, + unitsInStore: 20, + unitsOnOrder: 0, + reorderLevel: 10, + discontinued: false, + productImage: "" + }, + { + productID: 52, + productName: "Filo Mix", + supplierID: 24, + categoryID: 5, + quantityPerUnit: "16 - 2 kg boxes", + unitPrice: 7, + unitsInStore: 38, + unitsOnOrder: 0, + reorderLevel: 25, + discontinued: false, + productImage: "" + }, + { + productID: 53, + productName: "Perth Pasties", + supplierID: 24, + categoryID: 6, + quantityPerUnit: "48 pieces", + unitPrice: 32.8, + unitsInStore: 0, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: true, + productImage: "" + }, + { + productID: 54, + productName: "Tourtière", + supplierID: 25, + categoryID: 6, + quantityPerUnit: "16 pies", + unitPrice: 7.45, + unitsInStore: 21, + unitsOnOrder: 0, + reorderLevel: 10, + discontinued: false, + productImage: "" + }, + { + productID: 55, + productName: "Pâté chinois", + supplierID: 25, + categoryID: 6, + quantityPerUnit: "24 boxes x 2 pies", + unitPrice: 24, + unitsInStore: 115, + unitsOnOrder: 0, + reorderLevel: 20, + discontinued: false, + productImage: "" + }, + { + productID: 56, + productName: "Gnocchi di nonna Alice", + supplierID: 26, + categoryID: 5, + quantityPerUnit: "24 - 250 g pkgs.", + unitPrice: 38, + unitsInStore: 21, + unitsOnOrder: 10, + reorderLevel: 30, + discontinued: false, + productImage: "" + }, + { + productID: 57, + productName: "Ravioli Angelo", + supplierID: 26, + categoryID: 5, + quantityPerUnit: "24 - 250 g pkgs.", + unitPrice: 19.5, + unitsInStore: 36, + unitsOnOrder: 0, + reorderLevel: 20, + discontinued: false, + productImage: "" + }, + { + productID: 58, + productName: "Escargots de Bourgogne", + supplierID: 27, + categoryID: 8, + quantityPerUnit: "24 pieces", + unitPrice: 13.25, + unitsInStore: 62, + unitsOnOrder: 0, + reorderLevel: 20, + discontinued: false, + productImage: "" + }, + { + productID: 59, + productName: "Raclette Courdavault", + supplierID: 28, + categoryID: 4, + quantityPerUnit: "5 kg pkg.", + unitPrice: 55, + unitsInStore: 79, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Raclette_-_001.jpg/258px-Raclette_-_001.jpg" + }, + { + productID: 60, + productName: "Camembert Pierrot", + supplierID: 28, + categoryID: 4, + quantityPerUnit: "15 - 300 g rounds", + unitPrice: 34, + unitsInStore: 19, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 61, + productName: "Sirop d'érable", + supplierID: 29, + categoryID: 2, + quantityPerUnit: "24 - 500 ml bottles", + unitPrice: 28.5, + unitsInStore: 113, + unitsOnOrder: 0, + reorderLevel: 25, + discontinued: false, + productImage: "https://th.bing.com/th/id/OIP.gUJ7crJUM3yLzV5m5FXnqAHaOt?w=115&h=180&c=7&o=5&dpr=1.5&pid=1.7" + }, + { + productID: 62, + productName: "Tarte au sucre", + supplierID: 29, + categoryID: 3, + quantityPerUnit: "48 pies", + unitPrice: 49.3, + unitsInStore: 17, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 63, + productName: "Vegie-spread", + supplierID: 7, + categoryID: 2, + quantityPerUnit: "15 - 625 g jars", + unitPrice: 43.9, + unitsInStore: 24, + unitsOnOrder: 0, + reorderLevel: 5, + discontinued: false, + productImage: "" + }, + { + productID: 64, + productName: "Wimmers gute Semmelknödel", + supplierID: 12, + categoryID: 5, + quantityPerUnit: "20 bags x 4 pieces", + unitPrice: 33.25, + unitsInStore: 22, + unitsOnOrder: 80, + reorderLevel: 30, + discontinued: false, + productImage: "" + }, + { + productID: 65, + productName: "Louisiana Fiery Hot Pepper Sauce", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "32 - 8 oz bottles", + unitPrice: 21.05, + unitsInStore: 76, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 66, + productName: "Louisiana Hot Spiced Okra", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "24 - 8 oz jars", + unitPrice: 17, + unitsInStore: 4, + unitsOnOrder: 100, + reorderLevel: 20, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Okra_in_a_Bowl_%28Unsplash%29.jpg/180px-Okra_in_a_Bowl_%28Unsplash%29.jpg" + }, + { + productID: 67, + productName: "Laughing Lumberjack Lager", + supplierID: 16, + categoryID: 1, + quantityPerUnit: "24 - 12 oz bottles", + unitPrice: 14, + unitsInStore: 52, + unitsOnOrder: 0, + reorderLevel: 10, + discontinued: false, + productImage: "" + }, + { + productID: 68, + productName: "Scottish Longbreads", + supplierID: 8, + categoryID: 3, + quantityPerUnit: "10 boxes x 8 pieces", + unitPrice: 12.5, + unitsInStore: 6, + unitsOnOrder: 10, + reorderLevel: 15, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Hefeweizen_Glass.jpg/330px-Hefeweizen_Glass.jpg" + }, + { + productID: 69, + productName: "Gudbrandsdalsost", + supplierID: 15, + categoryID: 4, + quantityPerUnit: "10 kg pkg.", + unitPrice: 36, + unitsInStore: 26, + unitsOnOrder: 0, + reorderLevel: 15, + discontinued: false, + productImage: "" + }, + { + productID: 70, + productName: "Outback Lager", + supplierID: 7, + categoryID: 1, + quantityPerUnit: "24 - 355 ml bottles", + unitPrice: 15, + unitsInStore: 15, + unitsOnOrder: 10, + reorderLevel: 30, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Weizenbier.jpg/150px-Weizenbier.jpg" + }, + { + productID: 71, + productName: "Flotemysost", + supplierID: 15, + categoryID: 4, + quantityPerUnit: "10 - 500 g pkgs.", + unitPrice: 21.5, + unitsInStore: 26, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: "" + }, + { + productID: 72, + productName: "Mozzarella di Giovanni", + supplierID: 14, + categoryID: 4, + quantityPerUnit: "24 - 200 g pkgs.", + unitPrice: 34.8, + unitsInStore: 14, + unitsOnOrder: 0, + reorderLevel: 0, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Mozzarella_cheese.jpg/245px-Mozzarella_cheese.jpg" + }, + { + productID: 73, + productName: "Röd Kaviar", + supplierID: 17, + categoryID: 8, + quantityPerUnit: "24 - 150 g jars", + unitPrice: 15, + unitsInStore: 101, + unitsOnOrder: 0, + reorderLevel: 5, + discontinued: false, + productImage: "" + }, + { + productID: 74, + productName: "Longlife Tofu", + supplierID: 4, + categoryID: 7, + quantityPerUnit: "5 kg pkg.", + unitPrice: 10, + unitsInStore: 4, + unitsOnOrder: 20, + reorderLevel: 5, + discontinued: false, + productImage: "" + }, + { + productID: 75, + productName: "Rhönbräu Klosterbier", + supplierID: 12, + categoryID: 1, + quantityPerUnit: "24 - 0.5 l bottles", + unitPrice: 7.75, + unitsInStore: 125, + unitsOnOrder: 0, + reorderLevel: 25, + discontinued: false, + productImage: "" + }, + { + productID: 76, + productName: "Lakkalikööri", + supplierID: 23, + categoryID: 1, + quantityPerUnit: "500 ml", + unitPrice: 18, + unitsInStore: 57, + unitsOnOrder: 0, + reorderLevel: 20, + discontinued: false, + productImage: "" + }, + { + productID: 77, + productName: "Original Frankfurter grüne Soße", + supplierID: 12, + categoryID: 2, + quantityPerUnit: "12 boxes", + unitPrice: 13, + unitsInStore: 32, + unitsOnOrder: 0, + reorderLevel: 15, + discontinued: false, + productImage: "" + } + ]; + + const categories = [ + { + categoryID: 1, + categoryName: "Beverages", + description: "Soft drinks, coffees, teas, beers, and ales" + }, + { + categoryID: 2, + categoryName: "Condiments", + description: "Sweet and savory sauces, relishes, spreads, and seasonings" + }, + { + categoryID: 3, + categoryName: "Confections", + description: "Desserts, candies, and sweet breads" + }, + { + categoryID: 4, + categoryName: "Dairy Products", + description: "Cheeses" + }, + { + categoryID: 5, + categoryName: "Grains/Cereals", + description: "Breads, crackers, pasta, and cereal" + }, + { + categoryID: 6, + categoryName: "Meat/Poultry", + description: "Prepared meats" + }, + { + categoryID: 7, + categoryName: "Produce", + description: "Dried fruit and bean curd" + }, + { + categoryID: 8, + categoryName: "Seafood", + description: "Seaweed and fish" + } + ]; + + const suppliers = [ + { + "supplierID": 1, + "companyName": "Exotic Liquids", + "contactName": "Charlotte Cooper", + "contactTitle": "Purchasing Manager", + "address": "49 Gilbert St.", + "city": "London", + "region": "", + "postalCode": "EC1 4SD", + "country": "UK", + "phone": "(171) 555-2222" + }, + { + "supplierID": 2, + "companyName": "New Orleans Cajun Delights", + "contactName": "Shelley Burke", + "contactTitle": "Order Administrator", + "address": "P.O. Box 78934", + "city": "New Orleans", + "region": "LA", + "postalCode": "70117", + "country": "USA", + "phone": "(100) 555-4822" + }, + { + "supplierID": 3, + "companyName": "Grandma Kelly's Homestead", + "contactName": "Regina Murphy", + "contactTitle": "Sales Representative", + "address": "707 Oxford Rd.", + "city": "Ann Arbor", + "region": "MI", + "postalCode": "48104", + "country": "USA", + "phone": "(313) 555-5735" + }, + { + "supplierID": 4, + "companyName": "Tokyo Traders", + "contactName": "Yoshi Nagase", + "contactTitle": "Marketing Manager", + "address": "9-8 Sekimai Musashino-shi", + "city": "Tokyo", + "region": "", + "postalCode": "100", + "country": "Japan", + "phone": "(03) 3555-5011" + }, + { + "supplierID": 5, + "companyName": "Cooperativa de Quesos 'Las Cabras'", + "contactName": "Antonio del Valle Saavedra", + "contactTitle": "Export Administrator", + "address": "Calle del Rosal 4", + "city": "Oviedo", + "region": "Asturias", + "postalCode": "33007", + "country": "Spain", + "phone": "(98) 598 76 54" + }, + { + "supplierID": 6, + "companyName": "Mayumi's", + "contactName": "Mayumi Ohno", + "contactTitle": "Marketing Representative", + "address": "92 Setsuko Chuo-ku", + "city": "Osaka", + "region": "", + "postalCode": "545", + "country": "Japan", + "phone": "(06) 431-7877" + }, + { + "supplierID": 7, + "companyName": "Pavlova, Ltd.", + "contactName": "Ian Devling", + "contactTitle": "Marketing Manager", + "address": "74 Rose St. Moonie Ponds", + "city": "Melbourne", + "region": "Victoria", + "postalCode": "3058", + "country": "Australia", + "phone": "(03) 444-2343" + }, + { + "supplierID": 8, + "companyName": "Specialty Biscuits, Ltd.", + "contactName": "Peter Wilson", + "contactTitle": "Sales Representative", + "address": "29 King's Way", + "city": "Manchester", + "region": "", + "postalCode": "M14 GSD", + "country": "UK", + "phone": "(161) 555-4448" + }, + { + "supplierID": 9, + "companyName": "PB Knäckebröd AB", + "contactName": "Lars Peterson", + "contactTitle": "Sales Agent", + "address": "Kaloadagatan 13", + "city": "Göteborg", + "region": "", + "postalCode": "S-345 67", + "country": "Sweden", + "phone": "031-987 65 43" + }, + { + "supplierID": 10, + "companyName": "Refrescos Americanas LTDA", + "contactName": "Carlos Diaz", + "contactTitle": "Marketing Manager", + "address": "Av. das Americanas 12.890", + "city": "Sao Paulo", + "region": "", + "postalCode": "5442", + "country": "Brazil", + "phone": "(11) 555 4640" + }, + { + "supplierID": 11, + "companyName": "Heli Süßwaren GmbH & Co. KG", + "contactName": "Petra Winkler", + "contactTitle": "Sales Manager", + "address": "Tiergartenstraße 5", + "city": "Berlin", + "region": "", + "postalCode": "10785", + "country": "Germany", + "phone": "(010) 9984510" + }, + { + "supplierID": 12, + "companyName": "Plutzer Lebensmittelgroßmärkte AG", + "contactName": "Martin Bein", + "contactTitle": "International Marketing Mgr.", + "address": "Bogenallee 51", + "city": "Frankfurt", + "region": "", + "postalCode": "60439", + "country": "Germany", + "phone": "(069) 992755" + }, + { + "supplierID": 13, + "companyName": "Nord-Ost-Fisch Handelsgesellschaft mbH", + "contactName": "Sven Petersen", + "contactTitle": "Coordinator Foreign Markets", + "address": "Frahmredder 112a", + "city": "Cuxhaven", + "region": "", + "postalCode": "27478", + "country": "Germany", + "phone": "(04721) 8713" + }, + { + "supplierID": 14, + "companyName": "Formaggi Fortini s.r.l.", + "contactName": "Elio Rossi", + "contactTitle": "Sales Representative", + "address": "Viale Dante, 75", + "city": "Ravenna", + "region": "", + "postalCode": "48100", + "country": "Italy", + "phone": "(0544) 60323" + }, + { + "supplierID": 15, + "companyName": "Norske Meierier", + "contactName": "Beate Vileid", + "contactTitle": "Marketing Manager", + "address": "Hatlevegen 5", + "city": "Sandvika", + "region": "", + "postalCode": "1320", + "country": "Norway", + "phone": "(0)2-953010" + }, + { + "supplierID": 16, + "companyName": "Bigfoot Breweries", + "contactName": "Cheryl Saylor", + "contactTitle": "Regional Account Rep.", + "address": "3400 - 8th Avenue Suite 210", + "city": "Bend", + "region": "OR", + "postalCode": "97101", + "country": "USA", + "phone": "(503) 555-9931" + }, + { + "supplierID": 17, + "companyName": "Svensk Sjöföda AB", + "contactName": "Michael Björn", + "contactTitle": "Sales Representative", + "address": "Brovallavägen 231", + "city": "Stockholm", + "region": "", + "postalCode": "S-123 45", + "country": "Sweden", + "phone": "08-123 45 67" + }, + { + "supplierID": 18, + "companyName": "Aux joyeux ecclésiastiques", + "contactName": "Guylène Nodier", + "contactTitle": "Sales Manager", + "address": "203, Rue des Francs-Bourgeois", + "city": "Paris", + "region": "", + "postalCode": "75004", + "country": "France", + "phone": "(1) 03.83.00.68" + }, + { + "supplierID": 19, + "companyName": "New England Seafood Cannery", + "contactName": "Robb Merchant", + "contactTitle": "Wholesale Account Agent", + "address": "Order Processing Dept. 2100 Paul Revere Blvd.", + "city": "Boston", + "region": "MA", + "postalCode": "02134", + "country": "USA", + "phone": "(617) 555-3267" + }, + { + "supplierID": 20, + "companyName": "Leka Trading", + "contactName": "Chandra Leka", + "contactTitle": "Owner", + "address": "471 Serangoon Loop, Suite #402", + "city": "Singapore", + "region": "", + "postalCode": "0512", + "country": "Singapore", + "phone": "555-8787" + }, + { + "supplierID": 21, + "companyName": "Lyngbysild", + "contactName": "Niels Petersen", + "contactTitle": "Sales Manager", + "address": "Lyngbysild Fiskebakken 10", + "city": "Lyngby", + "region": "", + "postalCode": "2800", + "country": "Denmark", + "phone": "43844108" + }, + { + "supplierID": 22, + "companyName": "Zaanse Snoepfabriek", + "contactName": "Dirk Luchte", + "contactTitle": "Accounting Manager", + "address": "Verkoop Rijnweg 22", + "city": "Zaandam", + "region": "", + "postalCode": "9999 ZZ", + "country": "Netherlands", + "phone": "(12345) 1212" + }, + { + "supplierID": 23, + "companyName": "Karkki Oy", + "contactName": "Anne Heikkonen", + "contactTitle": "Product Manager", + "address": "Valtakatu 12", + "city": "Lappeenranta", + "region": "", + "postalCode": "53120", + "country": "Finland", + "phone": "(953) 10956" + }, + { + "supplierID": 24, + "companyName": "G'day, Mate", + "contactName": "Wendy Mackenzie", + "contactTitle": "Sales Representative", + "address": "170 Prince Edward Parade Hunter's Hill", + "city": "Sydney", + "region": "NSW", + "postalCode": "2042", + "country": "Australia", + "phone": "(02) 555-5914" + }, + { + "supplierID": 25, + "companyName": "Ma Maison", + "contactName": "Jean-Guy Lauzon", + "contactTitle": "Marketing Manager", + "address": "2960 Rue St. Laurent", + "city": "Montréal", + "region": "Québec", + "postalCode": "H1J 1C3", + "country": "Canada", + "phone": "(514) 555-9022" + }, + { + "supplierID": 26, + "companyName": "Pasta Buttini s.r.l.", + "contactName": "Giovanni Giudici", + "contactTitle": "Order Administrator", + "address": "Via dei Gelsomini, 153", + "city": "Salerno", + "region": "", + "postalCode": "84100", + "country": "Italy", + "phone": "(089) 6547665" + }, + { + "supplierID": 27, + "companyName": "Escargots Nouveaux", + "contactName": "Marie Delamare", + "contactTitle": "Sales Manager", + "address": "22, rue H. Voiron", + "city": "Montceau", + "region": "", + "postalCode": "71300", + "country": "France", + "phone": "85.57.00.07" + }, + { + "supplierID": 28, + "companyName": "Gai pâturage", + "contactName": "Eliane Noz", + "contactTitle": "Sales Representative", + "address": "Bat. B 3, rue des Alpes", + "city": "Annecy", + "region": "", + "postalCode": "74000", + "country": "France", + "phone": "38.76.98.06" + }, + { + "supplierID": 29, + "companyName": "Forêts d'érables", + "contactName": "Chantal Goulet", + "contactTitle": "Accounting Manager", + "address": "148 rue Chasseur", + "city": "Ste-Hyacinthe", + "region": "Québec", + "postalCode": "J2S 7S8", + "country": "Canada", + "phone": "(514) 555-2955" + } + ]; + language: typescript +template: + content: |- +
+

Demonstrates how to create entity values for each row in a 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/beta/hosted/office.js + https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + + 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/excel/85-preview-apis/data-types-error-values.yaml b/samples/excel/85-preview-apis/data-types-error-values.yaml new file mode 100644 index 000000000..6c12450f0 --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-error-values.yaml @@ -0,0 +1,97 @@ +order: 4 +id: excel-data-types-error-values +name: 'Data types: Set error values' +description: Demonstrates how to set a cell value to an error data type. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#run").click(() => tryCatch(run)); + + /* + * Set cell A1 to #BUSY! error + */ + async function run() { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("A1"); + + const error: Excel.ErrorCellValue = { + type: Excel.CellValueType.error, + errorType: Excel.ErrorCellValueType.busy + }; + + range.valuesAsJson = [[error]]; + + await context.sync(); + }); + } + + /** + * Setup sample data + */ + + 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(); + }); + } + + /** 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 set a cell value to an error data type.

+
+
+

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 + https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + + 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/excel.json b/view-prod/excel.json index 5352ec291..7a51d0145 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -119,7 +119,9 @@ "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml", + "excel-data-types-entity-values-from-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index c510cfe3d..280efac45 100644 --- a/view/excel.json +++ b/view/excel.json @@ -119,7 +119,9 @@ "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml", + "excel-data-types-entity-values-from-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From a20b8114bc6a4f4f89a0c0a6510ec928cd7a7572 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Wed, 30 Mar 2022 18:52:15 -0700 Subject: [PATCH 065/336] [Excel] (Data types) Update comments and formatting of entity value and error data type snippets (#615) * [Excel] (Data types) Update comments and formatting of error data type snippet * Simplify entity value snippet by removing products * Expand comments in entity snippet * Simplify entity value snippet by removing category properties * Expand entity snippet description * Update excel.xlsx * Run yarn start * Switch member IDs from enum to type * Rename entity snippet filename * Re-run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Re-run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 29 +- playlists/excel.yaml | 29 +- .../data-types-entity-values-from-table.yaml | 1753 ----------------- .../data-types-entity-values.yaml | 603 ++++++ .../data-types-error-values.yaml | 35 +- .../85-preview-apis/range-dependents.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 25306 -> 25446 bytes snippet-extractor-output/snippets.yaml | 66 + view-prod/excel.json | 4 +- view/excel.json | 4 +- 10 files changed, 722 insertions(+), 1803 deletions(-) delete mode 100644 samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml create mode 100644 samples/excel/85-preview-apis/data-types-entity-values.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 1db593e1e..80860f011 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1138,12 +1138,24 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-entity-values-from-table +- id: excel-data-types-entity-values name: 'Data types: Create entity values from data in a table' - fileName: data-types-entity-values-from-table.yaml - description: Demonstrates how to create entity values for each row in a table. + fileName: data-types-entity-values.yaml + description: >- + This sample shows how to create entity values for each row in a table. An + entity value is a container for data types, similar to an object in + object-oriented programming. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-error-values + name: 'Data types: Set error values' + fileName: data-types-error-values.yaml + description: This sample shows how to set a cell value to an error data type. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) @@ -1158,15 +1170,6 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-error-values - name: 'Data types: Set error values' - fileName: data-types-error-values.yaml - description: Demonstrates how to set a cell value to an error data type. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 75d23b066..90679f18c 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1138,12 +1138,24 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-entity-values-from-table +- id: excel-data-types-entity-values name: 'Data types: Create entity values from data in a table' - fileName: data-types-entity-values-from-table.yaml - description: Demonstrates how to create entity values for each row in a table. + fileName: data-types-entity-values.yaml + description: >- + This sample shows how to create entity values for each row in a table. An + entity value is a container for data types, similar to an object in + object-oriented programming. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-error-values + name: 'Data types: Set error values' + fileName: data-types-error-values.yaml + description: This sample shows how to set a cell value to an error data type. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) @@ -1158,15 +1170,6 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-error-values - name: 'Data types: Set error values' - fileName: data-types-error-values.yaml - description: Demonstrates how to set a cell value to an error data type. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml b/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml deleted file mode 100644 index 9006efe14..000000000 --- a/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml +++ /dev/null @@ -1,1753 +0,0 @@ -order: 3 -id: excel-data-types-entity-values-from-table -name: 'Data types: Create entity values from data in a table' -description: Demonstrates how to create entity values for each row in a table. -host: EXCEL -api_set: - ExcelApi: BETA (PREVIEW ONLY) -script: - content: |- - $("#setup").click(() => tryCatch(setup)); - $("#run").click(() => tryCatch(run)); - - async function run() { - await Excel.run(async (context) => { - const productsTable = context.workbook.tables.getItem("ProductsTable"); - - // Add a new column to the table for the entity values - productsTable.columns.getItemOrNullObject("Product").delete(); - const productColumn = productsTable.columns.add(0, null, "Product"); - - // Get product data from table - const dataRange = productsTable.getDataBodyRange(); - dataRange.load("values"); - - await context.sync(); - - // Add product entities to table - const entities = dataRange.values.map((rowValues) => { - // Get addtional product properties - const product = getProduct(rowValues[1]); - // Get category properties - const category = product ? getCategory(product.categoryID) : null; - // Get supplier properties - const supplier = product ? getSupplier(product.supplierID) : null; - // Return the entity - return [makeProductEntity(rowValues[1], rowValues[2], product, category, supplier)]; - }); - productColumn.getDataBodyRange().valuesAsJson = entities; - - productColumn.getRange().format.autofitColumns(); - - await context.sync(); - }); - } - - /** Get product properties */ - function getProduct(productID: number): any { - return products.find((p) => p.productID == productID); - } - - /** Get category properties */ - function getCategory(categoryID: number): any { - return categories.find((c) => c.categoryID == categoryID); - } - - /** Get supplier properties */ - function getSupplier(supplierID: number): any { - return suppliers.find((s) => s.supplierID == supplierID); - } - - /** Make entity from product properties */ - function makeProductEntity( - productID: number, - productName: string, - product?: any, - category?: any, - supplier?: any) { - const entity: Excel.EntityCellValue = { - type: Excel.CellValueType.entity, - text: productName, - properties: { - "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" - }, - // Add Units In Store as a formatted number - "Units In Stock": { - type: Excel.CellValueType.formattedNumber, - basicValue: product.unitsInStore, - numberFormat: "#,##0" - }, - // Add Units On Order as a formatted number - "Units On Order": { - type: Excel.CellValueType.formattedNumber, - basicValue: product.unitsOnOrder, - numberFormat: "#,##0" - }, - // Add Reorder Level as a formatted number - "Reorder Level": { - type: Excel.CellValueType.formattedNumber, - basicValue: product.reorderLevel, - numberFormat: "#,##0" - }, - Discontinued: { - type: Excel.CellValueType.boolean, - basicValue: product.discontinued || false - } - }, - layouts: { - card: { - title: { property: "Product Name" }, - sections: [ - { - layout: "List", - properties: ["Product ID"] - }, - { - layout: "List", - title: "Quantity and price", - collapsible: true, - collapsed: false, - properties: ["Quantity Per Unit", "Unit Price"] - }, - { - layout: "List", - title: "Inventory", - collapsible: true, - collapsed: true, - properties: ["Units In Stock", "Units On Order", "Reorder Level"] - }, - { - layout: "List", - title: "Additional information", - collapsed: true, - properties: ["Discontinued"] - } - ] - } - } - }; - - // Add image property to the entity and the card layout - if (product.productImage) { - entity.properties["Image"] = { - type: Excel.CellValueType.webImage, - address: product.productImage || "" - }; - entity.layouts.card.mainImage = { property: "Image" }; - } - - // Add a nested entity for the product category - if (category) { - entity.properties["Category"] = { - type: Excel.CellValueType.entity, - text: category.categoryName, - properties: { - "Category ID": { - type: Excel.CellValueType.double, - basicValue: category.categoryID, - propertyMetadata: { - // Exclude the category ID property from the card view and auto complete - excludeFrom: { - cardView: true, - autoComplete: true - } - } - }, - "Category Name": { - type: Excel.CellValueType.string, - basicValue: category.categoryName || "" - }, - "Description": { - type: Excel.CellValueType.string, - basicValue: category.description || "" - } - } - }; - // Add Category to the card layout - entity.layouts.card.sections[0].properties.push("Category"); - } - - // Add a nested entity for the supplier - if (supplier) { - entity.properties["Supplier"] = { - type: Excel.CellValueType.entity, - text: supplier.companyName, - properties: { - "Supplier ID": { - type: Excel.CellValueType.double, - basicValue: supplier.supplierID, - }, - "Company Name": { - type: Excel.CellValueType.string, - basicValue: supplier.companyName || "" - }, - "Contact Name": { - type: Excel.CellValueType.string, - basicValue: supplier.contactName || "" - }, - "Contact Title": { - type: Excel.CellValueType.string, - basicValue: supplier.contactTitle || "" - }, - "Address": { - type: Excel.CellValueType.string, - basicValue: supplier.address || "" - }, - "City": { - type: Excel.CellValueType.string, - basicValue: supplier.city || "" - }, - "Region": { - type: Excel.CellValueType.string, - basicValue: supplier.region || "" - }, - "Postal Code": { - type: Excel.CellValueType.string, - basicValue: supplier.postalCode || "" - }, - "Country": { - type: Excel.CellValueType.string, - basicValue: supplier.country || "" - }, - "Phone": { - type: Excel.CellValueType.string, - basicValue: supplier.phone || "" - }, - }, - layouts: { - card: { - title: { property: "Company Name" }, - sections: [ - { - layout: "List", - properties: [ - "Supplier ID", - "Company Name", - "Contact Name", - "Contact Title", - "Address", - "City", - "Region", - "Postal Code", - "Country", - "Phone", - ] - }, - ] - } - } - }; - // Add Supplier to the card layout - entity.layouts.card.sections[2].properties.push("Supplier"); - } - return entity; - } - - /** Setup worksheet */ - async function setup() { - await Excel.run(async (context) => { - context.workbook.worksheets.getItemOrNullObject("Sample").delete(); - const sheet = context.workbook.worksheets.add("Sample"); - - const productsTable = sheet.tables.add("A1:C1", true /*hasHeaders*/); - productsTable.name = "ProductsTable"; - - productsTable.getHeaderRowRange().values = [["Product", "ProductID", "ProductName"]]; - - productsTable.rows.add( - null /*add at the end*/, - products.map((p) => [null, p.productID, p.productName]) - ); - - 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); - } - } - - /** Sample data */ - const products = [ - { - productID: 1, - productName: "Chai", - supplierID: 1, - categoryID: 1, - quantityPerUnit: "10 boxes x 20 bags", - unitPrice: 18, - unitsInStore: 39, - unitsOnOrder: 0, - reorderLevel: 10, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Masala_Chai.JPG/320px-Masala_Chai.JPG" - }, - { - productID: 2, - productName: "Chang", - supplierID: 1, - categoryID: 1, - quantityPerUnit: "24 - 12 oz bottles", - unitPrice: 19, - unitsInStore: 17, - unitsOnOrder: 40, - reorderLevel: 25, - discontinued: false, - productImage: "" - }, - { - productID: 3, - productName: "Aniseed Syrup", - supplierID: 1, - categoryID: 2, - quantityPerUnit: "12 - 550 ml bottles", - unitPrice: 10, - unitsInStore: 13, - unitsOnOrder: 70, - reorderLevel: 25, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Maltose_syrup.jpg/185px-Maltose_syrup.jpg" - }, - { - productID: 4, - productName: "Chef Anton's Cajun Seasoning", - supplierID: 2, - categoryID: 2, - quantityPerUnit: "48 - 6 oz jars", - unitPrice: 22, - unitsInStore: 53, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Kruidenmengeling-spice.jpg/193px-Kruidenmengeling-spice.jpg" - }, - { - productID: 5, - productName: "Chef Anton's Gumbo Mix", - supplierID: 2, - categoryID: 2, - quantityPerUnit: "36 boxes", - unitPrice: 21.35, - unitsInStore: 0, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Okra_in_a_Bowl_%28Unsplash%29.jpg/180px-Okra_in_a_Bowl_%28Unsplash%29.jpg" - }, - { - productID: 6, - productName: "Grandma's Boysenberry Spread", - supplierID: 3, - categoryID: 2, - quantityPerUnit: "12 - 8 oz jars", - unitPrice: 25, - unitsInStore: 120, - unitsOnOrder: 0, - reorderLevel: 25, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Making_cranberry_sauce_-_in_the_jar.jpg/90px-Making_cranberry_sauce_-_in_the_jar.jpg" - }, - { - productID: 7, - productName: "Uncle Bob's Organic Dried Pears", - supplierID: 3, - categoryID: 7, - quantityPerUnit: "12 - 1 lb pkgs.", - unitPrice: 30, - unitsInStore: 15, - unitsOnOrder: 0, - reorderLevel: 10, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/DriedPears.JPG/120px-DriedPears.JPG" - }, - { - productID: 8, - productName: "Northwoods Cranberry Sauce", - supplierID: 3, - categoryID: 2, - quantityPerUnit: "12 - 12 oz jars", - unitPrice: 40, - unitsInStore: 6, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Making_cranberry_sauce_-_stovetop.jpg/90px-Making_cranberry_sauce_-_stovetop.jpg" - }, - { - productID: 9, - productName: "Mishi Kobe Niku", - supplierID: 4, - categoryID: 6, - quantityPerUnit: "18 - 500 g pkgs.", - unitPrice: 97, - unitsInStore: 29, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: "" - }, - { - productID: 10, - productName: "Ikura", - supplierID: 4, - categoryID: 8, - quantityPerUnit: "12 - 200 ml jars", - unitPrice: 31, - unitsInStore: 31, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 11, - productName: "Queso Cabrales", - supplierID: 5, - categoryID: 4, - quantityPerUnit: "1 kg pkg.", - unitPrice: 21, - unitsInStore: 22, - unitsOnOrder: 30, - reorderLevel: 30, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Tilsit_cheese.jpg/190px-Tilsit_cheese.jpg" - }, - { - productID: 12, - productName: "Queso Manchego La Pastora", - supplierID: 5, - categoryID: 4, - quantityPerUnit: "10 - 500 g pkgs.", - unitPrice: 38, - unitsInStore: 86, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Manchego.jpg/177px-Manchego.jpg" - }, - { - productID: 13, - productName: "Konbu", - supplierID: 6, - categoryID: 8, - quantityPerUnit: "2 kg box", - unitPrice: 6, - unitsInStore: 24, - unitsOnOrder: 0, - reorderLevel: 5, - discontinued: false, - productImage: "" - }, - { - productID: 14, - productName: "Tofu", - supplierID: 6, - categoryID: 7, - quantityPerUnit: "40 - 100 g pkgs.", - unitPrice: 23.25, - unitsInStore: 35, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Korean.food-Dubu.gui-01.jpg/120px-Korean.food-Dubu.gui-01.jpg" - }, - { - productID: 15, - productName: "Genen Shouyu", - supplierID: 6, - categoryID: 2, - quantityPerUnit: "24 - 250 ml bottles", - unitPrice: 15.5, - unitsInStore: 39, - unitsOnOrder: 0, - reorderLevel: 5, - discontinued: false, - productImage: "" - }, - { - productID: 16, - productName: "Pavlova", - supplierID: 7, - categoryID: 3, - quantityPerUnit: "32 - 500 g boxes", - unitPrice: 17.45, - unitsInStore: 29, - unitsOnOrder: 0, - reorderLevel: 10, - discontinued: false, - productImage: "" - }, - { - productID: 17, - productName: "Alice Mutton", - supplierID: 7, - categoryID: 6, - quantityPerUnit: "20 - 1 kg tins", - unitPrice: 39, - unitsInStore: 0, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: "" - }, - { - productID: 18, - productName: "Carnarvon Tigers", - supplierID: 7, - categoryID: 8, - quantityPerUnit: "16 kg pkg.", - unitPrice: 62.5, - unitsInStore: 42, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 19, - productName: "Teatime Chocolate Biscuits", - supplierID: 8, - categoryID: 3, - quantityPerUnit: "10 boxes x 12 pieces", - unitPrice: 9.2, - unitsInStore: 25, - unitsOnOrder: 0, - reorderLevel: 5, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Macau_Koi_Kei_Bakery_Almond_Biscuits_2.JPG/120px-Macau_Koi_Kei_Bakery_Almond_Biscuits_2.JPG" - }, - { - productID: 20, - productName: "Sir Rodney's Marmalade", - supplierID: 8, - categoryID: 3, - quantityPerUnit: "30 gift boxes", - unitPrice: 81, - unitsInStore: 40, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Homemade_marmalade%2C_England.jpg/135px-Homemade_marmalade%2C_England.jpg" - }, - { - productID: 21, - productName: "Sir Rodney's Scones", - supplierID: 8, - categoryID: 3, - quantityPerUnit: "24 pkgs. x 4 pieces", - unitPrice: 10, - unitsInStore: 3, - unitsOnOrder: 40, - reorderLevel: 5, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Factura_membrillo.jpg/190px-Factura_membrillo.jpg" - }, - { - productID: 22, - productName: "Gustaf's Knäckebröd", - supplierID: 9, - categoryID: 5, - quantityPerUnit: "24 - 500 g pkgs.", - unitPrice: 21, - unitsInStore: 104, - unitsOnOrder: 0, - reorderLevel: 25, - discontinued: false, - productImage: "" - }, - { - productID: 23, - productName: "Tunnbröd", - supplierID: 9, - categoryID: 5, - quantityPerUnit: "12 - 250 g pkgs.", - unitPrice: 9, - unitsInStore: 61, - unitsOnOrder: 0, - reorderLevel: 25, - discontinued: false, - productImage: "" - }, - { - productID: 24, - productName: "Guaraná Fantástica", - supplierID: 10, - categoryID: 1, - quantityPerUnit: "12 - 355 ml cans", - unitPrice: 4.5, - unitsInStore: 20, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: "" - }, - { - productID: 25, - productName: "NuNuCa Nuß-Nougat-Creme", - supplierID: 11, - categoryID: 3, - quantityPerUnit: "20 - 450 g glasses", - unitPrice: 14, - unitsInStore: 76, - unitsOnOrder: 0, - reorderLevel: 30, - discontinued: false, - productImage: "" - }, - { - productID: 26, - productName: "Gumbär Gummibärchen", - supplierID: 11, - categoryID: 3, - quantityPerUnit: "100 - 250 g bags", - unitPrice: 31.23, - unitsInStore: 15, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 27, - productName: "Schoggi Schokolade", - supplierID: 11, - categoryID: 3, - quantityPerUnit: "100 - 100 g pieces", - unitPrice: 43.9, - unitsInStore: 49, - unitsOnOrder: 0, - reorderLevel: 30, - discontinued: false, - productImage: "" - }, - { - productID: 28, - productName: "Rössle Sauerkraut", - supplierID: 12, - categoryID: 7, - quantityPerUnit: "25 - 825 g cans", - unitPrice: 45.6, - unitsInStore: 26, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: "https://th.bing.com/th/id/OIP.w9WSAKPISXlOtxZr6E_ErgAAAA?w=118&h=180&c=7&o=5&dpr=1.5&pid=1.7" - }, - { - productID: 29, - productName: "Thüringer Rostbratwurst", - supplierID: 12, - categoryID: 6, - quantityPerUnit: "50 bags x 30 sausgs.", - unitPrice: 123.79, - unitsInStore: 0, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Rote_Bratw%C3%BCrste_auf_einem_Grillrost.JPG/220px-Rote_Bratw%C3%BCrste_auf_einem_Grillrost.JPG" - }, - { - productID: 30, - productName: "Nord-Ost Matjeshering", - supplierID: 13, - categoryID: 8, - quantityPerUnit: "10 - 200 g glasses", - unitPrice: 25.89, - unitsInStore: 10, - unitsOnOrder: 0, - reorderLevel: 15, - discontinued: false, - productImage: "" - }, - { - productID: 31, - productName: "Gorgonzola Telino", - supplierID: 14, - categoryID: 4, - quantityPerUnit: "12 - 100 g pkgs", - unitPrice: 12.5, - unitsInStore: 0, - unitsOnOrder: 70, - reorderLevel: 20, - discontinued: false, - productImage: "https://th.bing.com/th/id/OIP.L8uKB_VBE4XT-31q4roMiQAAAA?w=135&h=154&c=7&o=5&dpr=1.5&pid=1.7" - }, - { - productID: 32, - productName: "Mascarpone Fabioli", - supplierID: 14, - categoryID: 4, - quantityPerUnit: "24 - 200 g pkgs.", - unitPrice: 32, - unitsInStore: 9, - unitsOnOrder: 40, - reorderLevel: 25, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Mascarpone_2.jpg/220px-Mascarpone_2.jpg" - }, - { - productID: 33, - productName: "Geitost", - supplierID: 15, - categoryID: 4, - quantityPerUnit: "500 g", - unitPrice: 2.5, - unitsInStore: 112, - unitsOnOrder: 0, - reorderLevel: 20, - discontinued: false, - productImage: "" - }, - { - productID: 34, - productName: "Sasquatch Ale", - supplierID: 16, - categoryID: 1, - quantityPerUnit: "24 - 12 oz bottles", - unitPrice: 14, - unitsInStore: 111, - unitsOnOrder: 0, - reorderLevel: 15, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Hefeweizen_Glass.jpg/330px-Hefeweizen_Glass.jpg" - }, - { - productID: 35, - productName: "Steeleye Stout", - supplierID: 16, - categoryID: 1, - quantityPerUnit: "24 - 12 oz bottles", - unitPrice: 18, - unitsInStore: 20, - unitsOnOrder: 0, - reorderLevel: 15, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Weizenbier.jpg/150px-Weizenbier.jpg" - }, - { - productID: 36, - productName: "Inlagd Sill", - supplierID: 17, - categoryID: 8, - quantityPerUnit: "24 - 250 g jars", - unitPrice: 19, - unitsInStore: 112, - unitsOnOrder: 0, - reorderLevel: 20, - discontinued: false, - productImage: "" - }, - { - productID: 37, - productName: "Gravad lax", - supplierID: 17, - categoryID: 8, - quantityPerUnit: "12 - 500 g pkgs.", - unitPrice: 26, - unitsInStore: 11, - unitsOnOrder: 50, - reorderLevel: 25, - discontinued: false, - productImage: "" - }, - { - productID: 38, - productName: "Côte de Blaye", - supplierID: 18, - categoryID: 1, - quantityPerUnit: "12 - 75 cl bottles", - unitPrice: 263.5, - unitsInStore: 17, - unitsOnOrder: 0, - reorderLevel: 15, - discontinued: false, - productImage: "" - }, - { - productID: 39, - productName: "Chartreuse verte", - supplierID: 18, - categoryID: 1, - quantityPerUnit: "750 cc per bottle", - unitPrice: 18, - unitsInStore: 69, - unitsOnOrder: 0, - reorderLevel: 5, - discontinued: false, - productImage: "" - }, - { - productID: 40, - productName: "Boston Crab Meat", - supplierID: 19, - categoryID: 8, - quantityPerUnit: "24 - 4 oz tins", - unitPrice: 18.4, - unitsInStore: 123, - unitsOnOrder: 0, - reorderLevel: 30, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Kanikama.jpg/220px-Kanikama.jpg" - }, - { - productID: 41, - productName: "Jack's New England Clam Chowder", - supplierID: 19, - categoryID: 8, - quantityPerUnit: "12 - 12 oz cans", - unitPrice: 9.65, - unitsInStore: 85, - unitsOnOrder: 0, - reorderLevel: 10, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/6/69/Quail_07_bg_041506.jpg/300px-Quail_07_bg_041506.jpg" - }, - { - productID: 42, - productName: "Singaporean Hokkien Fried Mee", - supplierID: 20, - categoryID: 5, - quantityPerUnit: "32 - 1 kg pkgs.", - unitPrice: 14, - unitsInStore: 26, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: "" - }, - { - productID: 43, - productName: "Ipoh Coffee", - supplierID: 20, - categoryID: 1, - quantityPerUnit: "16 - 500 g tins", - unitPrice: 46, - unitsInStore: 17, - unitsOnOrder: 10, - reorderLevel: 25, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Dark_roasted_espresso_blend_coffee_beans_2.jpg/200px-Dark_roasted_espresso_blend_coffee_beans_2.jpg" - }, - { - productID: 44, - productName: "Gula Malacca", - supplierID: 20, - categoryID: 2, - quantityPerUnit: "20 - 2 kg bags", - unitPrice: 19.45, - unitsInStore: 27, - unitsOnOrder: 0, - reorderLevel: 15, - discontinued: false, - productImage: "" - }, - { - productID: 45, - productName: "Rogede sild", - supplierID: 21, - categoryID: 8, - quantityPerUnit: "1k pkg.", - unitPrice: 9.5, - unitsInStore: 5, - unitsOnOrder: 70, - reorderLevel: 15, - discontinued: false, - productImage: "" - }, - { - productID: 46, - productName: "Spegesild", - supplierID: 21, - categoryID: 8, - quantityPerUnit: "4 - 450 g glasses", - unitPrice: 12, - unitsInStore: 95, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 47, - productName: "Zaanse koeken", - supplierID: 22, - categoryID: 3, - quantityPerUnit: "10 - 4 oz boxes", - unitPrice: 9.5, - unitsInStore: 36, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 48, - productName: "Chocolade", - supplierID: 22, - categoryID: 3, - quantityPerUnit: "10 pkgs.", - unitPrice: 12.75, - unitsInStore: 15, - unitsOnOrder: 70, - reorderLevel: 25, - discontinued: false, - productImage: "" - }, - { - productID: 49, - productName: "Maxilaku", - supplierID: 23, - categoryID: 3, - quantityPerUnit: "24 - 50 g pkgs.", - unitPrice: 20, - unitsInStore: 10, - unitsOnOrder: 60, - reorderLevel: 15, - discontinued: false, - productImage: "" - }, - { - productID: 50, - productName: "Valkoinen suklaa", - supplierID: 23, - categoryID: 3, - quantityPerUnit: "12 - 100 g bars", - unitPrice: 16.25, - unitsInStore: 65, - unitsOnOrder: 0, - reorderLevel: 30, - discontinued: false, - productImage: "" - }, - { - productID: 51, - productName: "Manjimup Dried Apples", - supplierID: 24, - categoryID: 7, - quantityPerUnit: "50 - 300 g pkgs.", - unitPrice: 53, - unitsInStore: 20, - unitsOnOrder: 0, - reorderLevel: 10, - discontinued: false, - productImage: "" - }, - { - productID: 52, - productName: "Filo Mix", - supplierID: 24, - categoryID: 5, - quantityPerUnit: "16 - 2 kg boxes", - unitPrice: 7, - unitsInStore: 38, - unitsOnOrder: 0, - reorderLevel: 25, - discontinued: false, - productImage: "" - }, - { - productID: 53, - productName: "Perth Pasties", - supplierID: 24, - categoryID: 6, - quantityPerUnit: "48 pieces", - unitPrice: 32.8, - unitsInStore: 0, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: true, - productImage: "" - }, - { - productID: 54, - productName: "Tourtière", - supplierID: 25, - categoryID: 6, - quantityPerUnit: "16 pies", - unitPrice: 7.45, - unitsInStore: 21, - unitsOnOrder: 0, - reorderLevel: 10, - discontinued: false, - productImage: "" - }, - { - productID: 55, - productName: "Pâté chinois", - supplierID: 25, - categoryID: 6, - quantityPerUnit: "24 boxes x 2 pies", - unitPrice: 24, - unitsInStore: 115, - unitsOnOrder: 0, - reorderLevel: 20, - discontinued: false, - productImage: "" - }, - { - productID: 56, - productName: "Gnocchi di nonna Alice", - supplierID: 26, - categoryID: 5, - quantityPerUnit: "24 - 250 g pkgs.", - unitPrice: 38, - unitsInStore: 21, - unitsOnOrder: 10, - reorderLevel: 30, - discontinued: false, - productImage: "" - }, - { - productID: 57, - productName: "Ravioli Angelo", - supplierID: 26, - categoryID: 5, - quantityPerUnit: "24 - 250 g pkgs.", - unitPrice: 19.5, - unitsInStore: 36, - unitsOnOrder: 0, - reorderLevel: 20, - discontinued: false, - productImage: "" - }, - { - productID: 58, - productName: "Escargots de Bourgogne", - supplierID: 27, - categoryID: 8, - quantityPerUnit: "24 pieces", - unitPrice: 13.25, - unitsInStore: 62, - unitsOnOrder: 0, - reorderLevel: 20, - discontinued: false, - productImage: "" - }, - { - productID: 59, - productName: "Raclette Courdavault", - supplierID: 28, - categoryID: 4, - quantityPerUnit: "5 kg pkg.", - unitPrice: 55, - unitsInStore: 79, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Raclette_-_001.jpg/258px-Raclette_-_001.jpg" - }, - { - productID: 60, - productName: "Camembert Pierrot", - supplierID: 28, - categoryID: 4, - quantityPerUnit: "15 - 300 g rounds", - unitPrice: 34, - unitsInStore: 19, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 61, - productName: "Sirop d'érable", - supplierID: 29, - categoryID: 2, - quantityPerUnit: "24 - 500 ml bottles", - unitPrice: 28.5, - unitsInStore: 113, - unitsOnOrder: 0, - reorderLevel: 25, - discontinued: false, - productImage: "https://th.bing.com/th/id/OIP.gUJ7crJUM3yLzV5m5FXnqAHaOt?w=115&h=180&c=7&o=5&dpr=1.5&pid=1.7" - }, - { - productID: 62, - productName: "Tarte au sucre", - supplierID: 29, - categoryID: 3, - quantityPerUnit: "48 pies", - unitPrice: 49.3, - unitsInStore: 17, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 63, - productName: "Vegie-spread", - supplierID: 7, - categoryID: 2, - quantityPerUnit: "15 - 625 g jars", - unitPrice: 43.9, - unitsInStore: 24, - unitsOnOrder: 0, - reorderLevel: 5, - discontinued: false, - productImage: "" - }, - { - productID: 64, - productName: "Wimmers gute Semmelknödel", - supplierID: 12, - categoryID: 5, - quantityPerUnit: "20 bags x 4 pieces", - unitPrice: 33.25, - unitsInStore: 22, - unitsOnOrder: 80, - reorderLevel: 30, - discontinued: false, - productImage: "" - }, - { - productID: 65, - productName: "Louisiana Fiery Hot Pepper Sauce", - supplierID: 2, - categoryID: 2, - quantityPerUnit: "32 - 8 oz bottles", - unitPrice: 21.05, - unitsInStore: 76, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 66, - productName: "Louisiana Hot Spiced Okra", - supplierID: 2, - categoryID: 2, - quantityPerUnit: "24 - 8 oz jars", - unitPrice: 17, - unitsInStore: 4, - unitsOnOrder: 100, - reorderLevel: 20, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Okra_in_a_Bowl_%28Unsplash%29.jpg/180px-Okra_in_a_Bowl_%28Unsplash%29.jpg" - }, - { - productID: 67, - productName: "Laughing Lumberjack Lager", - supplierID: 16, - categoryID: 1, - quantityPerUnit: "24 - 12 oz bottles", - unitPrice: 14, - unitsInStore: 52, - unitsOnOrder: 0, - reorderLevel: 10, - discontinued: false, - productImage: "" - }, - { - productID: 68, - productName: "Scottish Longbreads", - supplierID: 8, - categoryID: 3, - quantityPerUnit: "10 boxes x 8 pieces", - unitPrice: 12.5, - unitsInStore: 6, - unitsOnOrder: 10, - reorderLevel: 15, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Hefeweizen_Glass.jpg/330px-Hefeweizen_Glass.jpg" - }, - { - productID: 69, - productName: "Gudbrandsdalsost", - supplierID: 15, - categoryID: 4, - quantityPerUnit: "10 kg pkg.", - unitPrice: 36, - unitsInStore: 26, - unitsOnOrder: 0, - reorderLevel: 15, - discontinued: false, - productImage: "" - }, - { - productID: 70, - productName: "Outback Lager", - supplierID: 7, - categoryID: 1, - quantityPerUnit: "24 - 355 ml bottles", - unitPrice: 15, - unitsInStore: 15, - unitsOnOrder: 10, - reorderLevel: 30, - discontinued: false, - productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Weizenbier.jpg/150px-Weizenbier.jpg" - }, - { - productID: 71, - productName: "Flotemysost", - supplierID: 15, - categoryID: 4, - quantityPerUnit: "10 - 500 g pkgs.", - unitPrice: 21.5, - unitsInStore: 26, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: "" - }, - { - productID: 72, - productName: "Mozzarella di Giovanni", - supplierID: 14, - categoryID: 4, - quantityPerUnit: "24 - 200 g pkgs.", - unitPrice: 34.8, - unitsInStore: 14, - unitsOnOrder: 0, - reorderLevel: 0, - discontinued: false, - productImage: - "https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Mozzarella_cheese.jpg/245px-Mozzarella_cheese.jpg" - }, - { - productID: 73, - productName: "Röd Kaviar", - supplierID: 17, - categoryID: 8, - quantityPerUnit: "24 - 150 g jars", - unitPrice: 15, - unitsInStore: 101, - unitsOnOrder: 0, - reorderLevel: 5, - discontinued: false, - productImage: "" - }, - { - productID: 74, - productName: "Longlife Tofu", - supplierID: 4, - categoryID: 7, - quantityPerUnit: "5 kg pkg.", - unitPrice: 10, - unitsInStore: 4, - unitsOnOrder: 20, - reorderLevel: 5, - discontinued: false, - productImage: "" - }, - { - productID: 75, - productName: "Rhönbräu Klosterbier", - supplierID: 12, - categoryID: 1, - quantityPerUnit: "24 - 0.5 l bottles", - unitPrice: 7.75, - unitsInStore: 125, - unitsOnOrder: 0, - reorderLevel: 25, - discontinued: false, - productImage: "" - }, - { - productID: 76, - productName: "Lakkalikööri", - supplierID: 23, - categoryID: 1, - quantityPerUnit: "500 ml", - unitPrice: 18, - unitsInStore: 57, - unitsOnOrder: 0, - reorderLevel: 20, - discontinued: false, - productImage: "" - }, - { - productID: 77, - productName: "Original Frankfurter grüne Soße", - supplierID: 12, - categoryID: 2, - quantityPerUnit: "12 boxes", - unitPrice: 13, - unitsInStore: 32, - unitsOnOrder: 0, - reorderLevel: 15, - discontinued: false, - productImage: "" - } - ]; - - const categories = [ - { - categoryID: 1, - categoryName: "Beverages", - description: "Soft drinks, coffees, teas, beers, and ales" - }, - { - categoryID: 2, - categoryName: "Condiments", - description: "Sweet and savory sauces, relishes, spreads, and seasonings" - }, - { - categoryID: 3, - categoryName: "Confections", - description: "Desserts, candies, and sweet breads" - }, - { - categoryID: 4, - categoryName: "Dairy Products", - description: "Cheeses" - }, - { - categoryID: 5, - categoryName: "Grains/Cereals", - description: "Breads, crackers, pasta, and cereal" - }, - { - categoryID: 6, - categoryName: "Meat/Poultry", - description: "Prepared meats" - }, - { - categoryID: 7, - categoryName: "Produce", - description: "Dried fruit and bean curd" - }, - { - categoryID: 8, - categoryName: "Seafood", - description: "Seaweed and fish" - } - ]; - - const suppliers = [ - { - "supplierID": 1, - "companyName": "Exotic Liquids", - "contactName": "Charlotte Cooper", - "contactTitle": "Purchasing Manager", - "address": "49 Gilbert St.", - "city": "London", - "region": "", - "postalCode": "EC1 4SD", - "country": "UK", - "phone": "(171) 555-2222" - }, - { - "supplierID": 2, - "companyName": "New Orleans Cajun Delights", - "contactName": "Shelley Burke", - "contactTitle": "Order Administrator", - "address": "P.O. Box 78934", - "city": "New Orleans", - "region": "LA", - "postalCode": "70117", - "country": "USA", - "phone": "(100) 555-4822" - }, - { - "supplierID": 3, - "companyName": "Grandma Kelly's Homestead", - "contactName": "Regina Murphy", - "contactTitle": "Sales Representative", - "address": "707 Oxford Rd.", - "city": "Ann Arbor", - "region": "MI", - "postalCode": "48104", - "country": "USA", - "phone": "(313) 555-5735" - }, - { - "supplierID": 4, - "companyName": "Tokyo Traders", - "contactName": "Yoshi Nagase", - "contactTitle": "Marketing Manager", - "address": "9-8 Sekimai Musashino-shi", - "city": "Tokyo", - "region": "", - "postalCode": "100", - "country": "Japan", - "phone": "(03) 3555-5011" - }, - { - "supplierID": 5, - "companyName": "Cooperativa de Quesos 'Las Cabras'", - "contactName": "Antonio del Valle Saavedra", - "contactTitle": "Export Administrator", - "address": "Calle del Rosal 4", - "city": "Oviedo", - "region": "Asturias", - "postalCode": "33007", - "country": "Spain", - "phone": "(98) 598 76 54" - }, - { - "supplierID": 6, - "companyName": "Mayumi's", - "contactName": "Mayumi Ohno", - "contactTitle": "Marketing Representative", - "address": "92 Setsuko Chuo-ku", - "city": "Osaka", - "region": "", - "postalCode": "545", - "country": "Japan", - "phone": "(06) 431-7877" - }, - { - "supplierID": 7, - "companyName": "Pavlova, Ltd.", - "contactName": "Ian Devling", - "contactTitle": "Marketing Manager", - "address": "74 Rose St. Moonie Ponds", - "city": "Melbourne", - "region": "Victoria", - "postalCode": "3058", - "country": "Australia", - "phone": "(03) 444-2343" - }, - { - "supplierID": 8, - "companyName": "Specialty Biscuits, Ltd.", - "contactName": "Peter Wilson", - "contactTitle": "Sales Representative", - "address": "29 King's Way", - "city": "Manchester", - "region": "", - "postalCode": "M14 GSD", - "country": "UK", - "phone": "(161) 555-4448" - }, - { - "supplierID": 9, - "companyName": "PB Knäckebröd AB", - "contactName": "Lars Peterson", - "contactTitle": "Sales Agent", - "address": "Kaloadagatan 13", - "city": "Göteborg", - "region": "", - "postalCode": "S-345 67", - "country": "Sweden", - "phone": "031-987 65 43" - }, - { - "supplierID": 10, - "companyName": "Refrescos Americanas LTDA", - "contactName": "Carlos Diaz", - "contactTitle": "Marketing Manager", - "address": "Av. das Americanas 12.890", - "city": "Sao Paulo", - "region": "", - "postalCode": "5442", - "country": "Brazil", - "phone": "(11) 555 4640" - }, - { - "supplierID": 11, - "companyName": "Heli Süßwaren GmbH & Co. KG", - "contactName": "Petra Winkler", - "contactTitle": "Sales Manager", - "address": "Tiergartenstraße 5", - "city": "Berlin", - "region": "", - "postalCode": "10785", - "country": "Germany", - "phone": "(010) 9984510" - }, - { - "supplierID": 12, - "companyName": "Plutzer Lebensmittelgroßmärkte AG", - "contactName": "Martin Bein", - "contactTitle": "International Marketing Mgr.", - "address": "Bogenallee 51", - "city": "Frankfurt", - "region": "", - "postalCode": "60439", - "country": "Germany", - "phone": "(069) 992755" - }, - { - "supplierID": 13, - "companyName": "Nord-Ost-Fisch Handelsgesellschaft mbH", - "contactName": "Sven Petersen", - "contactTitle": "Coordinator Foreign Markets", - "address": "Frahmredder 112a", - "city": "Cuxhaven", - "region": "", - "postalCode": "27478", - "country": "Germany", - "phone": "(04721) 8713" - }, - { - "supplierID": 14, - "companyName": "Formaggi Fortini s.r.l.", - "contactName": "Elio Rossi", - "contactTitle": "Sales Representative", - "address": "Viale Dante, 75", - "city": "Ravenna", - "region": "", - "postalCode": "48100", - "country": "Italy", - "phone": "(0544) 60323" - }, - { - "supplierID": 15, - "companyName": "Norske Meierier", - "contactName": "Beate Vileid", - "contactTitle": "Marketing Manager", - "address": "Hatlevegen 5", - "city": "Sandvika", - "region": "", - "postalCode": "1320", - "country": "Norway", - "phone": "(0)2-953010" - }, - { - "supplierID": 16, - "companyName": "Bigfoot Breweries", - "contactName": "Cheryl Saylor", - "contactTitle": "Regional Account Rep.", - "address": "3400 - 8th Avenue Suite 210", - "city": "Bend", - "region": "OR", - "postalCode": "97101", - "country": "USA", - "phone": "(503) 555-9931" - }, - { - "supplierID": 17, - "companyName": "Svensk Sjöföda AB", - "contactName": "Michael Björn", - "contactTitle": "Sales Representative", - "address": "Brovallavägen 231", - "city": "Stockholm", - "region": "", - "postalCode": "S-123 45", - "country": "Sweden", - "phone": "08-123 45 67" - }, - { - "supplierID": 18, - "companyName": "Aux joyeux ecclésiastiques", - "contactName": "Guylène Nodier", - "contactTitle": "Sales Manager", - "address": "203, Rue des Francs-Bourgeois", - "city": "Paris", - "region": "", - "postalCode": "75004", - "country": "France", - "phone": "(1) 03.83.00.68" - }, - { - "supplierID": 19, - "companyName": "New England Seafood Cannery", - "contactName": "Robb Merchant", - "contactTitle": "Wholesale Account Agent", - "address": "Order Processing Dept. 2100 Paul Revere Blvd.", - "city": "Boston", - "region": "MA", - "postalCode": "02134", - "country": "USA", - "phone": "(617) 555-3267" - }, - { - "supplierID": 20, - "companyName": "Leka Trading", - "contactName": "Chandra Leka", - "contactTitle": "Owner", - "address": "471 Serangoon Loop, Suite #402", - "city": "Singapore", - "region": "", - "postalCode": "0512", - "country": "Singapore", - "phone": "555-8787" - }, - { - "supplierID": 21, - "companyName": "Lyngbysild", - "contactName": "Niels Petersen", - "contactTitle": "Sales Manager", - "address": "Lyngbysild Fiskebakken 10", - "city": "Lyngby", - "region": "", - "postalCode": "2800", - "country": "Denmark", - "phone": "43844108" - }, - { - "supplierID": 22, - "companyName": "Zaanse Snoepfabriek", - "contactName": "Dirk Luchte", - "contactTitle": "Accounting Manager", - "address": "Verkoop Rijnweg 22", - "city": "Zaandam", - "region": "", - "postalCode": "9999 ZZ", - "country": "Netherlands", - "phone": "(12345) 1212" - }, - { - "supplierID": 23, - "companyName": "Karkki Oy", - "contactName": "Anne Heikkonen", - "contactTitle": "Product Manager", - "address": "Valtakatu 12", - "city": "Lappeenranta", - "region": "", - "postalCode": "53120", - "country": "Finland", - "phone": "(953) 10956" - }, - { - "supplierID": 24, - "companyName": "G'day, Mate", - "contactName": "Wendy Mackenzie", - "contactTitle": "Sales Representative", - "address": "170 Prince Edward Parade Hunter's Hill", - "city": "Sydney", - "region": "NSW", - "postalCode": "2042", - "country": "Australia", - "phone": "(02) 555-5914" - }, - { - "supplierID": 25, - "companyName": "Ma Maison", - "contactName": "Jean-Guy Lauzon", - "contactTitle": "Marketing Manager", - "address": "2960 Rue St. Laurent", - "city": "Montréal", - "region": "Québec", - "postalCode": "H1J 1C3", - "country": "Canada", - "phone": "(514) 555-9022" - }, - { - "supplierID": 26, - "companyName": "Pasta Buttini s.r.l.", - "contactName": "Giovanni Giudici", - "contactTitle": "Order Administrator", - "address": "Via dei Gelsomini, 153", - "city": "Salerno", - "region": "", - "postalCode": "84100", - "country": "Italy", - "phone": "(089) 6547665" - }, - { - "supplierID": 27, - "companyName": "Escargots Nouveaux", - "contactName": "Marie Delamare", - "contactTitle": "Sales Manager", - "address": "22, rue H. Voiron", - "city": "Montceau", - "region": "", - "postalCode": "71300", - "country": "France", - "phone": "85.57.00.07" - }, - { - "supplierID": 28, - "companyName": "Gai pâturage", - "contactName": "Eliane Noz", - "contactTitle": "Sales Representative", - "address": "Bat. B 3, rue des Alpes", - "city": "Annecy", - "region": "", - "postalCode": "74000", - "country": "France", - "phone": "38.76.98.06" - }, - { - "supplierID": 29, - "companyName": "Forêts d'érables", - "contactName": "Chantal Goulet", - "contactTitle": "Accounting Manager", - "address": "148 rue Chasseur", - "city": "Ste-Hyacinthe", - "region": "Québec", - "postalCode": "J2S 7S8", - "country": "Canada", - "phone": "(514) 555-2955" - } - ]; - language: typescript -template: - content: |- -
-

Demonstrates how to create entity values for each row in a 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/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts - - 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/excel/85-preview-apis/data-types-entity-values.yaml b/samples/excel/85-preview-apis/data-types-entity-values.yaml new file mode 100644 index 000000000..17997f1e4 --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-entity-values.yaml @@ -0,0 +1,603 @@ +order: 3 +id: excel-data-types-entity-values +name: 'Data types: Create entity values from data in a table' +description: 'This sample shows how to create entity values for each row in a table. An entity value is a container for data types, similar to an object in object-oriented programming.' +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: |- + $("#setup").click(() => tryCatch(setup)); + $("#addEntitiesToTable").click(() => tryCatch(addEntitiesToTable)); + + async function addEntitiesToTable() { + await Excel.run(async (context) => { + // This method retrieves data for each of the existing products in the table, + // creates entity values for each of those products, and adds the entities + // to the table. + + const productsTable = context.workbook.tables.getItem("ProductsTable"); + + // Add a new column to the table for the entity values. + productsTable.columns.getItemOrNullObject("Product").delete(); + const productColumn = productsTable.columns.add(0, null, "Product"); + + // Get product data from the table. + const dataRange = productsTable.getDataBodyRange(); + dataRange.load("values"); + + await context.sync(); + + // Set up the entities by mapping the product names to + // the sample JSON product data. + const entities = dataRange.values.map((rowValues) => { + // Get products and product properties. + const product = getProduct(rowValues[1]); + + // Get product categories and category properties. + const category = product ? getCategory(product.categoryID) : null; + + // Get product suppliers and supplier properties. + const supplier = product ? getSupplier(product.supplierID) : null; + + // Create entities by combining product, category, and supplier properties. + return [makeProductEntity(rowValues[1], rowValues[2], product, category, supplier)]; + }); + + // Add the complete entities to the Products Table. + productColumn.getDataBodyRange().valuesAsJson = entities; + + productColumn.getRange().format.autofitColumns(); + await context.sync(); + }); + } + + // Create entities from product properties. + function makeProductEntity( + productID: number, + productName: string, + product?: any, + category?: any, + supplier?: any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { + "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" + }, + Discontinued: { + type: Excel.CellValueType.boolean, + basicValue: product.discontinued || false + } + }, + layouts: { + card: { + title: { property: "Product Name" }, + sections: [ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + }, + { + layout: "List", + title: "Additional information", + collapsed: true, + properties: ["Discontinued"] + } + ] + } + } + }; + + // Add image property to the entity and then add it to the card layout. + if (product.productImage) { + entity.properties["Image"] = { + type: Excel.CellValueType.webImage, + address: product.productImage || "" + }; + entity.layouts.card.mainImage = { property: "Image" }; + } + + // Add a nested entity for the product category. + if (category) { + entity.properties["Category"] = { + type: Excel.CellValueType.entity, + text: category.categoryName, + properties: { + "Category ID": { + type: Excel.CellValueType.double, + basicValue: category.categoryID, + propertyMetadata: { + // Exclude the category ID property from the card view and auto complete. + excludeFrom: { + cardView: true, + autoComplete: true + } + } + }, + "Category Name": { + type: Excel.CellValueType.string, + basicValue: category.categoryName || "" + }, + "Description": { + type: Excel.CellValueType.string, + basicValue: category.description || "" + } + } + }; + + // Add nested product category to the card layout. + entity.layouts.card.sections[0].properties.push("Category"); + } + + // Add a nested entity for the supplier. + if (supplier) { + entity.properties["Supplier"] = { + type: Excel.CellValueType.entity, + text: supplier.companyName, + properties: { + "Supplier ID": { + type: Excel.CellValueType.double, + basicValue: supplier.supplierID, + }, + "Company Name": { + type: Excel.CellValueType.string, + basicValue: supplier.companyName || "" + }, + "Contact Name": { + type: Excel.CellValueType.string, + basicValue: supplier.contactName || "" + }, + "Contact Title": { + type: Excel.CellValueType.string, + basicValue: supplier.contactTitle || "" + }, + }, + layouts: { + card: { + title: { property: "Company Name" }, + sections: [ + { + layout: "List", + properties: [ + "Supplier ID", + "Company Name", + "Contact Name", + "Contact Title" + ] + }, + ] + } + } + }; + + // Add nested product supplier to the card layout. + entity.layouts.card.sections[2].properties.push("Supplier"); + } + return entity; + } + + // Get products and product properties. + function getProduct(productID: number): any { + return products.find((p) => p.productID == productID); + } + + // Get product categories and category properties. + function getCategory(categoryID: number): any { + return categories.find((c) => c.categoryID == categoryID); + } + + // Get product suppliers and supplier properties. + function getSupplier(supplierID: number): any { + return suppliers.find((s) => s.supplierID == supplierID); + } + + /** Set up Sample worksheet. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const productsTable = sheet.tables.add("A1:C1", true /*hasHeaders*/); + productsTable.name = "ProductsTable"; + + productsTable.getHeaderRowRange().values = [["Product", "ProductID", "ProductName"]]; + + productsTable.rows.add( + null /*add at the end*/, + products.map((p) => [null, p.productID, p.productName]) + ); + + 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); + } + } + + /** Sample JSON product data. */ + const products = [ + { + productID: 1, + productName: "Chai", + supplierID: 1, + categoryID: 1, + quantityPerUnit: "10 boxes x 20 bags", + unitPrice: 18, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Masala_Chai.JPG/320px-Masala_Chai.JPG" + }, + { + productID: 2, + productName: "Chang", + supplierID: 1, + categoryID: 1, + quantityPerUnit: "24 - 12 oz bottles", + unitPrice: 19, + discontinued: false, + productImage: "" + }, + { + productID: 3, + productName: "Aniseed Syrup", + supplierID: 1, + categoryID: 2, + quantityPerUnit: "12 - 550 ml bottles", + unitPrice: 10, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Maltose_syrup.jpg/185px-Maltose_syrup.jpg" + }, + { + productID: 4, + productName: "Chef Anton's Cajun Seasoning", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "48 - 6 oz jars", + unitPrice: 22, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Kruidenmengeling-spice.jpg/193px-Kruidenmengeling-spice.jpg" + }, + { + productID: 5, + productName: "Chef Anton's Gumbo Mix", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "36 boxes", + unitPrice: 21.35, + discontinued: true, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Okra_in_a_Bowl_%28Unsplash%29.jpg/180px-Okra_in_a_Bowl_%28Unsplash%29.jpg" + }, + { + productID: 6, + productName: "Grandma's Boysenberry Spread", + supplierID: 3, + categoryID: 2, + quantityPerUnit: "12 - 8 oz jars", + unitPrice: 25, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Making_cranberry_sauce_-_in_the_jar.jpg/90px-Making_cranberry_sauce_-_in_the_jar.jpg" + }, + { + productID: 7, + productName: "Uncle Bob's Organic Dried Pears", + supplierID: 3, + categoryID: 7, + quantityPerUnit: "12 - 1 lb pkgs.", + unitPrice: 30, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/DriedPears.JPG/120px-DriedPears.JPG" + }, + { + productID: 8, + productName: "Northwoods Cranberry Sauce", + supplierID: 3, + categoryID: 2, + quantityPerUnit: "12 - 12 oz jars", + unitPrice: 40, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Making_cranberry_sauce_-_stovetop.jpg/90px-Making_cranberry_sauce_-_stovetop.jpg" + }, + { + productID: 9, + productName: "Mishi Kobe Niku", + supplierID: 4, + categoryID: 6, + quantityPerUnit: "18 - 500 g pkgs.", + unitPrice: 97, + discontinued: true, + productImage: "" + }, + { + productID: 10, + productName: "Ikura", + supplierID: 4, + categoryID: 8, + quantityPerUnit: "12 - 200 ml jars", + unitPrice: 31, + discontinued: false, + productImage: "" + }, + { + productID: 11, + productName: "Queso Cabrales", + supplierID: 5, + categoryID: 4, + quantityPerUnit: "1 kg pkg.", + unitPrice: 21, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Tilsit_cheese.jpg/190px-Tilsit_cheese.jpg" + }, + { + productID: 12, + productName: "Queso Manchego La Pastora", + supplierID: 5, + categoryID: 4, + quantityPerUnit: "10 - 500 g pkgs.", + unitPrice: 38, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Manchego.jpg/177px-Manchego.jpg" + }, + { + productID: 13, + productName: "Konbu", + supplierID: 6, + categoryID: 8, + quantityPerUnit: "2 kg box", + unitPrice: 6, + discontinued: false, + productImage: "" + }, + { + productID: 14, + productName: "Tofu", + supplierID: 6, + categoryID: 7, + quantityPerUnit: "40 - 100 g pkgs.", + unitPrice: 23.25, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Korean.food-Dubu.gui-01.jpg/120px-Korean.food-Dubu.gui-01.jpg" + }, + { + productID: 15, + productName: "Genen Shouyu", + supplierID: 6, + categoryID: 2, + quantityPerUnit: "24 - 250 ml bottles", + unitPrice: 15.5, + discontinued: false, + productImage: "" + }, + { + productID: 16, + productName: "Pavlova", + supplierID: 7, + categoryID: 3, + quantityPerUnit: "32 - 500 g boxes", + unitPrice: 17.45, + discontinued: false, + productImage: "" + }, + { + productID: 17, + productName: "Alice Mutton", + supplierID: 7, + categoryID: 6, + quantityPerUnit: "20 - 1 kg tins", + unitPrice: 39, + discontinued: true, + productImage: "" + }, + { + productID: 18, + productName: "Carnarvon Tigers", + supplierID: 7, + categoryID: 8, + quantityPerUnit: "16 kg pkg.", + unitPrice: 62.5, + discontinued: false, + productImage: "" + }, + { + productID: 19, + productName: "Teatime Chocolate Biscuits", + supplierID: 8, + categoryID: 3, + quantityPerUnit: "10 boxes x 12 pieces", + unitPrice: 9.2, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Macau_Koi_Kei_Bakery_Almond_Biscuits_2.JPG/120px-Macau_Koi_Kei_Bakery_Almond_Biscuits_2.JPG" + }, + { + productID: 20, + productName: "Sir Rodney's Marmalade", + supplierID: 8, + categoryID: 3, + quantityPerUnit: "30 gift boxes", + unitPrice: 81, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Homemade_marmalade%2C_England.jpg/135px-Homemade_marmalade%2C_England.jpg" + } + ]; + + const categories = [ + { + categoryID: 1, + categoryName: "Beverages", + description: "Soft drinks, coffees, teas, beers, and ales" + }, + { + categoryID: 2, + categoryName: "Condiments", + description: "Sweet and savory sauces, relishes, spreads, and seasonings" + }, + { + categoryID: 3, + categoryName: "Confections", + description: "Desserts, candies, and sweet breads" + }, + { + categoryID: 4, + categoryName: "Dairy Products", + description: "Cheeses" + }, + { + categoryID: 5, + categoryName: "Grains/Cereals", + description: "Breads, crackers, pasta, and cereal" + }, + { + categoryID: 6, + categoryName: "Meat/Poultry", + description: "Prepared meats" + }, + { + categoryID: 7, + categoryName: "Produce", + description: "Dried fruit and bean curd" + }, + { + categoryID: 8, + categoryName: "Seafood", + description: "Seaweed and fish" + } + ]; + + const suppliers = [ + { + "supplierID": 1, + "companyName": "Exotic Liquids", + "contactName": "Charlotte Cooper", + "contactTitle": "Purchasing Manager", + }, + { + "supplierID": 2, + "companyName": "New Orleans Cajun Delights", + "contactName": "Shelley Burke", + "contactTitle": "Order Administrator", + }, + { + "supplierID": 3, + "companyName": "Grandma Kelly's Homestead", + "contactName": "Regina Murphy", + "contactTitle": "Sales Representative", + }, + { + "supplierID": 4, + "companyName": "Tokyo Traders", + "contactName": "Yoshi Nagase", + "contactTitle": "Marketing Manager", + "address": "9-8 Sekimai Musashino-shi", + }, + { + "supplierID": 5, + "companyName": "Cooperativa de Quesos 'Las Cabras'", + "contactName": "Antonio del Valle Saavedra", + "contactTitle": "Export Administrator", + }, + { + "supplierID": 6, + "companyName": "Mayumi's", + "contactName": "Mayumi Ohno", + "contactTitle": "Marketing Representative", + }, + { + "supplierID": 7, + "companyName": "Pavlova, Ltd.", + "contactName": "Ian Devling", + "contactTitle": "Marketing Manager", + }, + { + "supplierID": 8, + "companyName": "Specialty Biscuits, Ltd.", + "contactName": "Peter Wilson", + "contactTitle": "Sales Representative", + } + ]; + language: typescript +template: + content: |- +
+

This sample shows how to create entity values for each row in a table. An entity value is a container for data types, similar to an object in object-oriented programming.

+

In particular, this sample highlights the card layout options of an entity value, including the title, an image, collapsible sections, and nested entity values.

+
+
+

Set up

+ +
+
+

Try it out

+ +

To see the entity value, click the icon to the left of the title in the Product column after selecting Add entity 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/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/excel/85-preview-apis/data-types-error-values.yaml b/samples/excel/85-preview-apis/data-types-error-values.yaml index 6c12450f0..fe996af22 100644 --- a/samples/excel/85-preview-apis/data-types-error-values.yaml +++ b/samples/excel/85-preview-apis/data-types-error-values.yaml @@ -1,38 +1,35 @@ order: 4 id: excel-data-types-error-values name: 'Data types: Set error values' -description: Demonstrates 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. host: EXCEL api_set: ExcelApi: BETA (PREVIEW ONLY) script: content: | $("#setup").click(() => tryCatch(setup)); - $("#run").click(() => tryCatch(run)); + $("#setBusyError").click(() => tryCatch(setBusyError)); - /* - * Set cell A1 to #BUSY! error - */ - async function run() { + async function setBusyError() { await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + // This method sets the value of cell A1 to a #BUSY! error using data types. + + // Retrieve the Sample worksheet and cell A1 on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); + // Get the error data type and set its type to `busy`. const error: Excel.ErrorCellValue = { type: Excel.CellValueType.error, errorType: Excel.ErrorCellValueType.busy }; + // Set cell A1 as the busy error. range.valuesAsJson = [[error]]; - await context.sync(); }); } - /** - * Setup sample data - */ - async function setup() { await Excel.run(async (context) => { // Create a new worksheet called "Sample" and activate it. @@ -57,16 +54,16 @@ script: template: content: |-
-

This sample demonstrates how to set a cell value to an error data type.

+

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

-

Set up

- -

Try it out

-
language: html @@ -85,7 +82,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + @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 diff --git a/samples/excel/85-preview-apis/range-dependents.yaml b/samples/excel/85-preview-apis/range-dependents.yaml index 71031dcaa..9e78dc49e 100644 --- a/samples/excel/85-preview-apis/range-dependents.yaml +++ b/samples/excel/85-preview-apis/range-dependents.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 5 id: excel-range-dependents name: Dependents description: This sample shows how to find and highlight the dependents of the currently selected cell. Dependent cells contain formulas that refer to other cells. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 19fdc80686f1fcb0527e039e7da150956d988311..191475bb9848c3d8d649d3612c63bd17f7b8c467 100644 GIT binary patch delta 16308 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 W0YUv=FW)5tpnw?#)Q-V_!2b`xW4i- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml + + await Excel.run(async (context) => { + // This method sets the value of cell A1 to a #BUSY! error using data types. + + // Retrieve the Sample worksheet and cell A1 on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const range = sheet.getRange("A1"); + + // Get the error data type and set its type to `busy`. + const error: Excel.ErrorCellValue = { + type: Excel.CellValueType.error, + errorType: Excel.ErrorCellValueType.busy + }; + + // Set cell A1 as the busy error. + range.valuesAsJson = [[error]]; + await context.sync(); + }); 'Excel.Chart#onActivated:member': - >- // Link to full sample: @@ -2500,6 +2522,50 @@ console.log(`${property.key}:${property.value}`); }); }); +'Excel.ErrorCellValue:type': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml + + await Excel.run(async (context) => { + // This method sets the value of cell A1 to a #BUSY! error using data types. + + // Retrieve the Sample worksheet and cell A1 on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const range = sheet.getRange("A1"); + + // Get the error data type and set its type to `busy`. + const error: Excel.ErrorCellValue = { + type: Excel.CellValueType.error, + errorType: Excel.ErrorCellValueType.busy + }; + + // Set cell A1 as the busy error. + range.valuesAsJson = [[error]]; + await context.sync(); + }); +'Excel.ErrorCellValueType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml + + await Excel.run(async (context) => { + // This method sets the value of cell A1 to a #BUSY! error using data types. + + // Retrieve the Sample worksheet and cell A1 on that sheet. + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const range = sheet.getRange("A1"); + + // Get the error data type and set its type to `busy`. + const error: Excel.ErrorCellValue = { + type: Excel.CellValueType.error, + errorType: Excel.ErrorCellValueType.busy + }; + + // Set cell A1 as the busy error. + range.valuesAsJson = [[error]]; + await context.sync(); + }); 'Excel.FilterCriteria#filterOn:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 7a51d0145..eb4ef143a 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -119,9 +119,9 @@ "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml", - "excel-data-types-entity-values-from-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml", - "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", + "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 280efac45..aa566ea02 100644 --- a/view/excel.json +++ b/view/excel.json @@ -119,9 +119,9 @@ "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml", "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml", - "excel-data-types-entity-values-from-table": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values-from-table.yaml", - "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", + "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 044a186f016eea0cedd181c7aa9af572408683c7 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 4 Apr 2022 14:01:25 -0700 Subject: [PATCH 066/336] [Excel] (PivotTable) Add PivotTable data source preview sample (#617) * [Excel] (PivotTable) Add PivotTable data source preview sample * Update description and comments * Update excel.xlsx * Run yarn start * Adjust line breaks * Update HTML * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 9 ++ playlists/excel.yaml | 9 ++ .../pivottable-source-data.yaml | 136 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 25446 -> 25515 bytes snippet-extractor-output/snippets.yaml | 40 ++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 196 insertions(+) create mode 100644 samples/excel/85-preview-apis/pivottable-source-data.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 80860f011..82f5f2422 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1170,6 +1170,15 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-pivottable-data-source + name: PivotTable data source + fileName: pivottable-source-data.yaml + description: Gets information about the data source of a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 90679f18c..59ca79f0c 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1170,6 +1170,15 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-pivottable-data-source + name: PivotTable data source + fileName: pivottable-source-data.yaml + description: Gets information about the data source of a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-source-data.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/pivottable-source-data.yaml b/samples/excel/85-preview-apis/pivottable-source-data.yaml new file mode 100644 index 000000000..1bf1d64d6 --- /dev/null +++ b/samples/excel/85-preview-apis/pivottable-source-data.yaml @@ -0,0 +1,136 @@ +order: 6 +id: excel-pivottable-data-source +name: PivotTable data source +description: Gets information about the data source of a PivotTable. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#get-pivottable-data-source").click(() => tryCatch(getPivotTableDataSource)); + + async function getPivotTableDataSource() { + await Excel.run(async (context) => { + // This method logs information about the data source of a PivotTable. + + const worksheet = context.workbook.worksheets.getItem("TotalPivot"); + const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); + + // Retrieve the type and string representation of the data source of the PivotTable. + const pivotTableDataSourceType = pivotTable.getDataSourceType(); + const pivotTableDataSourceString = pivotTable.getDataSourceString(); + await context.sync(); + + // Log the data source information. + console.log("Data source: " + pivotTableDataSourceString.value); + console.log("Source type: " + pivotTableDataSourceType.value); + }); + } + + async function setup() { + await Excel.run(async (context) => { + // Create the worksheets. + context.workbook.worksheets.getItemOrNullObject("Data").delete(); + const dataSheet = context.workbook.worksheets.add("Data"); + context.workbook.worksheets.getItemOrNullObject("TotalPivot").delete(); + const totalPivot = context.workbook.worksheets.add("TotalPivot"); + + // Create farm data. + const data = [ + ["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"], + ["A Farms", "Lime", "Organic", 300, 2000], + ["A Farms", "Lemon", "Organic", 250, 1800], + ["A Farms", "Orange", "Organic", 200, 2200], + ["B Farms", "Lime", "Conventional", 80, 1000], + ["B Farms", "Lemon", "Conventional", 75, 1230], + ["B Farms", "Orange", "Conventional", 25, 800], + ["B Farms", "Orange", "Organic", 20, 500], + ["B Farms", "Lemon", "Organic", 10, 770], + ["B Farms", "Kiwi", "Conventional", 30, 300], + ["B Farms", "Lime", "Organic", 50, 400], + ["C Farms", "Apple", "Organic", 275, 220], + ["C Farms", "Kiwi", "Organic", 200, 120], + ["D Farms", "Apple", "Conventional", 100, 3000], + ["D Farms", "Apple", "Organic", 80, 2800], + ["E Farms", "Lime", "Conventional", 160, 2700], + ["E Farms", "Orange", "Conventional", 180, 2000], + ["E Farms", "Apple", "Conventional", 245, 2200], + ["E Farms", "Kiwi", "Conventional", 200, 1500], + ["F Farms", "Kiwi", "Organic", 100, 150], + ["F Farms", "Lemon", "Conventional", 150, 270] + ]; + + const range = dataSheet.getRange("A1:E21"); + range.values = data; + range.format.autofitColumns(); + + // Create the PivotTable. + const pivotTable = totalPivot.pivotTables.add("All Farm Sales", "Data!A1:E21", "TotalPivot!A2"); + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Farm")); + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Type")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold at Farm")); + + // Switch to the worksheet with a PivotTable. + totalPivot.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 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: |- + 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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 191475bb9848c3d8d649d3612c63bd17f7b8c467..cbc45e156dc98c5e4c3673986b11cbd871089374 100644 GIT binary patch delta 14532 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 Te{Ff9oe*G524$=FANBtL#g{_t diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 4c187c8e6..51d14fab6 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3431,6 +3431,46 @@ } }); } +'Excel.PivotTable#getDataSourceString:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml + + await Excel.run(async (context) => { + // This method logs information about the data source of a PivotTable. + + const worksheet = context.workbook.worksheets.getItem("TotalPivot"); + const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); + + // Retrieve the type and string representation of the data source of the PivotTable. + const pivotTableDataSourceType = pivotTable.getDataSourceType(); + const pivotTableDataSourceString = pivotTable.getDataSourceString(); + await context.sync(); + + // Log the data source information. + console.log("Data source: " + pivotTableDataSourceString.value); + console.log("Source type: " + pivotTableDataSourceType.value); + }); +'Excel.PivotTable#getDataSourceType:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml + + await Excel.run(async (context) => { + // This method logs information about the data source of a PivotTable. + + const worksheet = context.workbook.worksheets.getItem("TotalPivot"); + const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); + + // Retrieve the type and string representation of the data source of the PivotTable. + const pivotTableDataSourceType = pivotTable.getDataSourceType(); + const pivotTableDataSourceString = pivotTable.getDataSourceString(); + await context.sync(); + + // Log the data source information. + console.log("Data source: " + pivotTableDataSourceString.value); + console.log("Source type: " + pivotTableDataSourceType.value); + }); 'Excel.PivotTableCollection#add:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index eb4ef143a..3e03f8351 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -122,6 +122,7 @@ "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index aa566ea02..e35360e9f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -122,6 +122,7 @@ "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-source-data.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From a43cafa3114257c0423d7dfaa5588ff6455d5476 Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Mon, 4 Apr 2022 16:23:43 -0700 Subject: [PATCH 067/336] Fixes instructions in PPT shapes snippet --- samples/powerpoint/preview-apis/shapes.yaml | 22 ++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/samples/powerpoint/preview-apis/shapes.yaml b/samples/powerpoint/preview-apis/shapes.yaml index d3e930089..58b69af00 100644 --- a/samples/powerpoint/preview-apis/shapes.yaml +++ b/samples/powerpoint/preview-apis/shapes.yaml @@ -157,18 +157,35 @@ template:

Try it out

+

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

+

+ + +

+ +

Create, shrink, and move a shape.

+

+

+

+

+ +

Create other shapes.

+

+ @@ -182,12 +199,7 @@ template: -

- -

language: html style: From aa8fbfd014c63b766bf15561946c169e16f859ef Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 22 Apr 2022 10:34:57 -0700 Subject: [PATCH 068/336] [Excel] (Chart) Add series data source preview API snippet (#622) * [Excel] (Chart) Add series data source preview API snippet * Fix CellValueType Member ID in excel.xlsx metadata * Add comments to code snippet * Update excel.xlsx * Simplify setup method * Run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Incorporate feedback from code review * Run yarn start * Adjust line breaks * Fix typo Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 11 ++ playlists/excel.yaml | 11 ++ .../85-preview-apis/chart-data-source.yaml | 127 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 25515 -> 25648 bytes snippet-extractor-output/snippets.yaml | 50 ++++++- view-prod/excel.json | 1 + view/excel.json | 1 + 7 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 samples/excel/85-preview-apis/chart-data-source.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 82f5f2422..b7e8bbc13 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1170,6 +1170,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-chart-data-source + name: Chart series data source + fileName: chart-data-source.yaml + description: >- + This sample shows how to get information about the data source of a chart + series. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-pivottable-data-source name: PivotTable data source fileName: pivottable-source-data.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 59ca79f0c..faa21cbf3 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1170,6 +1170,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-chart-data-source + name: Chart series data source + fileName: chart-data-source.yaml + description: >- + This sample shows how to get information about the data source of a chart + series. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/chart-data-source.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-pivottable-data-source name: PivotTable data source fileName: pivottable-source-data.yaml diff --git a/samples/excel/85-preview-apis/chart-data-source.yaml b/samples/excel/85-preview-apis/chart-data-source.yaml new file mode 100644 index 000000000..c3faea1a6 --- /dev/null +++ b/samples/excel/85-preview-apis/chart-data-source.yaml @@ -0,0 +1,127 @@ +order: 6 +id: excel-chart-data-source +name: Chart series data source +description: This sample shows how to get information about the data source of a chart series. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#log-chart-series-source").click(() => tryCatch(logChartSeriesSource)); + + async function logChartSeriesSource() { + await Excel.run(async (context) => { + // This method retrieves the data source information of a chart series in the Sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Get the first chart series from the first chart on the worksheet. + const seriesCollection = sheet.charts.getItemAt(0).series; + const series = seriesCollection.getItemAt(0); + + // Get the series data source string and type values. + const dataSourceString = series.getDimensionDataSourceString("Values"); + const dataSourceType = series.getDimensionDataSourceType("Values"); + + series.load("name"); + await context.sync(); + + // Log the data source information to the console. + console.log(series.name + " data source string: " + dataSourceString.value); + console.log(series.name + " data source type: " + dataSourceType.value); + }); + } + + 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"); + + // 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, [ + ["Frames", 5000, 7000, 6544, 4377], + ["Saddles", 400, 323, 276, 651], + ["Brake levers", 12000, 8766, 8456, 9812], + ["Chains", 1550, 1088, 692, 853], + ["Mirrors", 225, 600, 923, 544], + ["Spokes", 6005, 7634, 4589, 8765] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + sheet.activate(); + + // Create a line chart based on data from SalesTable. + let dataRange = sheet.getRange("A1:E7"); + let chart = sheet.charts.add("Line", dataRange, Excel.ChartSeriesBy.rows); + + // Position and style the chart. + chart.setPosition("A15", "E30"); + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + + 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 get information about the data source of a chart series.

+
+ +
+

Set up

+

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

+ +
+ +
+

Try it out

+

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

+ +
+ 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/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index cbc45e156dc98c5e4c3673986b11cbd871089374..63cec784c1bb16653ade7e4e37c171bd689d2466 100644 GIT binary patch delta 15523 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 Sah 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 delta 15402 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 KRjdCW`2PX1RPNdU diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 51d14fab6..9b0b491c5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -415,7 +415,7 @@ await context.sync(); }); -'Excel.CellValueType:type': +'Excel.CellValueType:enum': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml @@ -888,6 +888,54 @@ // Log the information. console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); +'Excel.ChartSeries#getDimensionDataSourceString:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml + + await Excel.run(async (context) => { + // This method retrieves the data source information of a chart series in the Sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Get the first chart series from the first chart on the worksheet. + const seriesCollection = sheet.charts.getItemAt(0).series; + const series = seriesCollection.getItemAt(0); + + // Get the series data source string and type values. + const dataSourceString = series.getDimensionDataSourceString("Values"); + const dataSourceType = series.getDimensionDataSourceType("Values"); + + series.load("name"); + await context.sync(); + + // Log the data source information to the console. + console.log(series.name + " data source string: " + dataSourceString.value); + console.log(series.name + " data source type: " + dataSourceType.value); + }); +'Excel.ChartSeries#getDimensionDataSourceType:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml + + await Excel.run(async (context) => { + // This method retrieves the data source information of a chart series in the Sample worksheet. + const sheet = context.workbook.worksheets.getItem("Sample"); + + // Get the first chart series from the first chart on the worksheet. + const seriesCollection = sheet.charts.getItemAt(0).series; + const series = seriesCollection.getItemAt(0); + + // Get the series data source string and type values. + const dataSourceString = series.getDimensionDataSourceString("Values"); + const dataSourceType = series.getDimensionDataSourceType("Values"); + + series.load("name"); + await context.sync(); + + // Log the data source information to the console. + console.log(series.name + " data source string: " + dataSourceString.value); + console.log(series.name + " data source type: " + dataSourceType.value); + }); 'Excel.ChartSeries#setBubbleSizes:member(1)': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 3e03f8351..adce5e32d 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -122,6 +122,7 @@ "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml", "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", diff --git a/view/excel.json b/view/excel.json index e35360e9f..ccd48373c 100644 --- a/view/excel.json +++ b/view/excel.json @@ -122,6 +122,7 @@ "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", + "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/chart-data-source.yaml", "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-source-data.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", From 6e5e87ffe5b5df85b7adaafdbb6d87c481b64d1a Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 26 Apr 2022 11:37:03 -0700 Subject: [PATCH 069/336] [Excel] (Range) Fix bug in find snippet (#624) * [Excel] (Range) Fix bug in find snippet * Run yarn start --- samples/excel/42-range/range-find.yaml | 4 ++-- snippet-extractor-output/snippets.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 9ad3fa386..5037390c8 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -26,7 +26,7 @@ script: // NOTE: If no match is found, an ItemNotFound error // is thrown when Range.find is evaluated. - const foundRange = searchRange.find($("#searchText").text(), { + const foundRange = searchRange.find($("#searchText").val().toString(), { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle @@ -45,7 +45,7 @@ script: const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); const searchRange = table.getRange(); - const foundRange = searchRange.findOrNullObject($("#searchText").text(), { + const foundRange = searchRange.findOrNullObject($("#searchText").val().toString(), { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 9b0b491c5..3b4a85825 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3987,7 +3987,7 @@ // NOTE: If no match is found, an ItemNotFound error // is thrown when Range.find is evaluated. - const foundRange = searchRange.find($("#searchText").text(), { + const foundRange = searchRange.find($("#searchText").val().toString(), { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle @@ -4008,7 +4008,7 @@ const sheet = context.workbook.worksheets.getItem("Sample"); const table = sheet.tables.getItem("ExpensesTable"); const searchRange = table.getRange(); - const foundRange = searchRange.findOrNullObject($("#searchText").text(), { + const foundRange = searchRange.findOrNullObject($("#searchText").val().toString(), { completeMatch: isCompleteMatchToggle, matchCase: isMatchCaseToggle, searchDirection: searchDirectionToggle From 21e92c67c8965e26d93729ad67985392c5f020c9 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 28 Apr 2022 16:16:09 -0700 Subject: [PATCH 070/336] [Excel] (Data types) Add entity value data provider attribution snippet (#626) * [Excel] (Data types) Add entity value data provider attribution snippet * Adjust whitespace * Add logo URLs, remove unnecessary extra products * Adjust logo * Adjust logo * Fix provider image source URLs * Align ID to snippet styles * Run yarn start * Add detail to comments * Simplify description * Remove unnecessary product image from JSON data * Update samples/excel/85-preview-apis/data-types-entity-attribution.yaml Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Add data aggregation explanation to description * Run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .github/images/microsoft-logo.png | Bin 0 -> 5627 bytes .github/images/msn-logo.png | Bin 0 -> 7255 bytes .github/images/xbox-logo.png | Bin 0 -> 10569 bytes playlists-prod/excel.yaml | 11 + playlists/excel.yaml | 11 + .../data-types-entity-attribution.yaml | 235 ++++++++++++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 8 files changed, 259 insertions(+) create mode 100644 .github/images/microsoft-logo.png create mode 100644 .github/images/msn-logo.png create mode 100644 .github/images/xbox-logo.png create mode 100644 samples/excel/85-preview-apis/data-types-entity-attribution.yaml diff --git a/.github/images/microsoft-logo.png b/.github/images/microsoft-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..06600fee706ea58a44560476b6fa5644f86dc81e GIT binary patch literal 5627 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 M9vNy>L+zvf2O`7oO#lD@ literal 0 HcmV?d00001 diff --git a/.github/images/xbox-logo.png b/.github/images/xbox-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fbe7abfade534dac7e344c6d58722071a5072ddc GIT binary patch literal 10569 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 Mt{_(V#USwi0DeL6g8%>k literal 0 HcmV?d00001 diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index b7e8bbc13..0bbd5f27e 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1190,6 +1190,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-entity-attribution + name: 'Data types: Entity value attribution properties' + fileName: data-types-entity-attribution.yaml + description: >- + This sample shows how to set data provider attributions on entity values in + the card layout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-attribution.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index faa21cbf3..bcb8e98bc 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1190,6 +1190,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-entity-attribution + name: 'Data types: Entity value attribution properties' + fileName: data-types-entity-attribution.yaml + description: >- + This sample shows how to set data provider attributions on entity values in + the card layout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-attribution.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/data-types-entity-attribution.yaml b/samples/excel/85-preview-apis/data-types-entity-attribution.yaml new file mode 100644 index 000000000..fdd1c7ad5 --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-entity-attribution.yaml @@ -0,0 +1,235 @@ +order: 7 +id: excel-data-types-entity-attribution +name: 'Data types: Entity value attribution properties' +description: This sample shows how to set data provider attributions on entity values in the card layout. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#add-entities-to-table").click(() => tryCatch(addEntitiesToTable)); + + async function addEntitiesToTable() { + await Excel.run(async (context) => { + // This method retrieves data for each of the existing products in the table, + // creates entity values for each of those products, and adds the entities + // to the table. + + const productsTable = context.workbook.tables.getItem("ProductsTable"); + + // Add a new column to the table for the entity values. + productsTable.columns.getItemOrNullObject("Product").delete(); + const productColumn = productsTable.columns.add(0, null, "Product"); + + // Get product data from the table. + const dataRange = productsTable.getDataBodyRange(); + dataRange.load("values"); + + await context.sync(); + + // Set up the entities by mapping the product names to + // the sample JSON product data. + const entities = dataRange.values.map((rowValues) => { + // Get products and product properties. + const product = getProduct(rowValues[1]); + + // Create entities by combining Products Table data and JSON data. + return [makeProductEntity(rowValues[1], rowValues[2], product)]; + }); + + // Add the complete entities to the Products Table. + productColumn.getDataBodyRange().valuesAsJson = entities; + + productColumn.getRange().format.autofitColumns(); + await context.sync(); + }); + } + + // Create entities with card layout and data provider fields. + function makeProductEntity(productID: number, productName: string, product?: any) { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: productName, + properties: { + "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: { + card: { + title: { property: "Product Name" }, + sections: [ + { + 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; + } + + // Get products and product properties. + function getProduct(productID: number): any { + return products.find((p) => p.productID == productID); + } + + /** Set up Sample worksheet. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const productsTable = sheet.tables.add("A1:C1", true /*hasHeaders*/); + productsTable.name = "ProductsTable"; + + productsTable.getHeaderRowRange().values = [["Product", "ProductID", "ProductName"]]; + + productsTable.rows.add( + null /*add at the end*/, + products.map((p) => [null, p.productID, p.productName]) + ); + + 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); + } + } + + /** Sample JSON product data. */ + const products = [ + { + productID: 1, + productName: "Chai", + quantityPerUnit: "10 boxes x 20 bags", + unitPrice: 18, + providerName: "Microsoft", + sourceAddress: "https://github.com/OfficeDev/office-js-snippets/blob/main/.github/images/microsoft-logo.png?raw=true", + targetAddress: "http://microsoft.com/" + }, + { + productID: 2, + productName: "Chang", + quantityPerUnit: "24 - 12 oz bottles", + unitPrice: 19, + providerName: "MSN", + sourceAddress: "https://github.com/OfficeDev/office-js-snippets/blob/main/.github/images/msn-logo.png?raw=true", + targetAddress: "http://msn.com/" + }, + { + productID: 3, + productName: "Aniseed Syrup", + quantityPerUnit: "12 - 550 ml bottles", + unitPrice: 10, + providerName: "Xbox", + sourceAddress: "https://github.com/OfficeDev/office-js-snippets/blob/main/.github/images/xbox-logo.png?raw=true", + targetAddress: "http://xbox.com/" + }, + { + productID: 4, + productName: "Chef Anton's Cajun Seasoning", + quantityPerUnit: "48 - 6 oz jars", + unitPrice: 22, + providerName: "Microsoft", + sourceAddress: "https://github.com/OfficeDev/office-js-snippets/blob/main/.github/images/microsoft-logo.png?raw=true", + targetAddress: "http://microsoft.com/" + }, + { + productID: 5, + productName: "Chef Anton's Gumbo Mix", + quantityPerUnit: "36 boxes", + unitPrice: 21.35, + providerName: "MSN", + sourceAddress: "https://github.com/OfficeDev/office-js-snippets/blob/main/.github/images/msn-logo.png?raw=true", + targetAddress: "http://msn.com/" + }, + ]; + 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

+ +

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: | + 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/excel.json b/view-prod/excel.json index adce5e32d..b35e848c1 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -124,6 +124,7 @@ "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml", "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml", + "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index ccd48373c..ef9bbaa1a 100644 --- a/view/excel.json +++ b/view/excel.json @@ -124,6 +124,7 @@ "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/chart-data-source.yaml", "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-source-data.yaml", + "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 572ecfcf4893a8aca688c0582fb3a380620d83aa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 May 2022 14:13:21 -0700 Subject: [PATCH 071/336] Bump minimist from 1.2.5 to 1.2.6 (#628) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 940e6c41d..143edee8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -650,9 +650,9 @@ minimatch@^3.0.4: brace-expansion "^1.1.7" minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== "mkdirp@>=0.5 0", mkdirp@^0.5.3: version "0.5.5" From eb3fcd8d58ccbe8e5abe9de04d8f7b87c594ee22 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 11 May 2022 10:01:45 -0700 Subject: [PATCH 072/336] [Word] (preview) How to get fields (#627) * [Word] (preview) How to get fields * Updates based on feedback * Updates based on feedback * Minor update --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + .../word/99-preview-apis/manage-fields.yaml | 154 +++++++++ snippet-extractor-metadata/word.xlsx | Bin 14548 -> 14704 bytes snippet-extractor-output/snippets.yaml | 298 ++++++++++++------ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 384 insertions(+), 88 deletions(-) create mode 100644 samples/word/99-preview-apis/manage-fields.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index a396212b6..6b8dcc159 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -224,6 +224,15 @@ group: Preview APIs api_set: WordApi: '1.4' +- id: word-manage-fields + name: Get fields + fileName: manage-fields.yaml + description: This sample shows how to get existing fields. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + group: Preview APIs + api_set: + WordApi: '1.4' - id: word-manage-footnotes name: Footnotes fileName: manage-footnotes.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 4abceed7e..629fe7b7a 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -224,6 +224,15 @@ group: Preview APIs api_set: WordApi: '1.4' +- id: word-manage-fields + name: Get fields + fileName: manage-fields.yaml + description: This sample shows how to get existing fields. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-fields.yaml + group: Preview APIs + api_set: + WordApi: '1.4' - id: word-manage-footnotes name: Footnotes fileName: manage-footnotes.yaml diff --git a/samples/word/99-preview-apis/manage-fields.yaml b/samples/word/99-preview-apis/manage-fields.yaml new file mode 100644 index 000000000..6503b5e5c --- /dev/null +++ b/samples/word/99-preview-apis/manage-fields.yaml @@ -0,0 +1,154 @@ +id: word-manage-fields +name: Get fields +description: This sample shows how to get existing fields. +host: WORD +api_set: + WordApi: '1.4' +script: + content: | + $("#get-first").click(() => tryCatch(getFirstField)); + $("#get-parent-body").click(() => tryCatch(getParentBodyOfFirstField)); + $("#get-all").click(() => tryCatch(getAllFields)); + $("#setup").click(() => tryCatch(setup)); + + async function getFirstField() { + // Gets the first field in the document body. + await Word.run(async (context) => { + const field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("There are no fields in this document."); + } else { + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + field.result); + } + }); + } + + async function getParentBodyOfFirstField() { + // 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)); + } + }); + } + + async function getAllFields() { + // 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 { + 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: ${fields.items[i].result}`); + } + } + }); + } + + async function setup() { + await Word.run(async (context) => { + let 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" + ); + }); + } + + /** 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: |- +
+ +
+

Set up

+ +
+ +
+

Add fields to document

+

At present, Word on the web doesn't support adding + fields + to the document.

+
    +
  1. Open Word on Windows or on Mac.
  2. +
  3. Insert at least one field. To learn how to do so, refer to Insert, + edit, and view fields in Word.
  4. +
  5. Optional: Open the same document in Word on the web.
  6. +
+
+ +
+

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 b09a1d416fec9eebe93db9a8bac757fd9fc55707..8d55753ab1c895d6f02f98e9ae7943ae0ae66f1e 100644 GIT binary patch delta 6760 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 YOXP#Oh`oIFS^!om#){!A{2$E!0Ah2*IsgCw delta 6584 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 + // 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. + let 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. + let data = [ + ["Tokyo", "Beijing", "Seattle"], + ["Apple", "Orange", "Pineapple"] + ]; + let table = context.document.body.insertTable(2, 3, "Start", data); + table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + table.styleFirstColumn = false; + + await context.sync(); + }); 'Word.Body#search:member(1)': - >- // Link to full sample: @@ -10921,43 +10959,26 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); -'Word.Body#insertParagraph:member(2)': +'Word.Body#fields:member': - >- // 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. - let 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 - }); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml - 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 + // Gets all fields in the document body. await Word.run(async (context) => { - // Use a two-dimensional array to hold the initial table values. - let data = [ - ["Tokyo", "Beijing", "Seattle"], - ["Apple", "Orange", "Pineapple"] - ]; - let table = context.document.body.insertTable(2, 3, "Start", data); - table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; - table.styleFirstColumn = false; + const fields = context.document.body.fields.load("items"); await context.sync(); + + if (fields.items.length === 0) { + console.log("No fields in this document."); + } else { + 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: ${fields.items[i].result}`); + } + } }); 'Word.Body#footnotes:member': - >- @@ -11186,6 +11207,64 @@ 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/99-preview-apis/content-control-ondeleted-event.yaml + + await Word.run(async (context) => { + let 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) => { + // Gets 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: "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#onDeleted:member': - >- // Link to full sample: @@ -11245,64 +11324,6 @@ } console.log("Content controls inserted: " + paragraphs.items.length); - await context.sync(); - }); -'Word.ContentControl#delete:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml - - await Word.run(async (context) => { - let 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) => { - // Gets 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: "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.ContentControlCollection#getByTag:member(1)': @@ -11397,6 +11418,107 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); +'Word.Field#getFirstOrNullObject:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + + // Gets the first field in the document body. + + await Word.run(async (context) => { + const field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("There are no fields in this document."); + } else { + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + field.result); + } + }); +'Word.Field#code:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + + // Gets the first field in the document body. + + await Word.run(async (context) => { + const field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("There are no fields in this document."); + } else { + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + field.result); + } + }); +'Word.Field#parentBody:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + + // 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#result:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + + // Gets the first field in the document body. + + await Word.run(async (context) => { + const field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result"]); + + await context.sync(); + + if (field.isNullObject) { + console.log("There are no fields in this document."); + } else { + console.log("Code of first field: " + field.code); + console.log("Result of first field: " + field.result); + } + }); +'Word.FieldCollection#items:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/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 { + 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: ${fields.items[i].result}`); + } + } + }); 'Word.InlinePicture#getBase64ImageSrc:member(1)': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 8b64e5c62..7200c12b7 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -23,5 +23,6 @@ "word-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", + "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml", "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 3cc208fed..70b6bcc63 100644 --- a/view/word.json +++ b/view/word.json @@ -23,5 +23,6 @@ "word-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-change-tracking.yaml", "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", + "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-fields.yaml", "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-footnotes.yaml" } \ No newline at end of file From 6a013643ee3afb9c9cd35cc73eb851b5b68e4328 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 19 May 2022 08:23:32 -0700 Subject: [PATCH 073/336] [Word] (Fields) Remap sample from Field to FieldCollection (#638) --- snippet-extractor-metadata/word.xlsx | Bin 14704 -> 14669 bytes snippet-extractor-output/snippets.yaml | 28 ++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 8d55753ab1c895d6f02f98e9ae7943ae0ae66f1e..2228f1c90e4b51c536eaa6e8326a900498a6b7d5 100644 GIT binary patch delta 4405 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 delta 4481 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 Mjt}U1@Ba}00ZIu?y#N3J diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 92378768e..c84fc7141 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11418,7 +11418,7 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); -'Word.Field#getFirstOrNullObject:member(1)': +'Word.Field#code:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml @@ -11438,47 +11438,47 @@ console.log("Result of first field: " + field.result); } }); -'Word.Field#code:member': +'Word.Field#parentBody:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml - // Gets the first field in the document body. + // 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(["code", "result"]); + field.load("parentBody/text"); await context.sync(); if (field.isNullObject) { - console.log("There are no fields in this document."); + console.log("This document has no fields."); } else { - console.log("Code of first field: " + field.code); - console.log("Result of first field: " + field.result); + const parentBody = field.parentBody; + console.log("Text of first field's parent body: " + JSON.stringify(parentBody.text)); } }); -'Word.Field#parentBody:member': +'Word.Field#result:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml - // Gets the parent body of the first field in the document. + // Gets the first field in the document body. await Word.run(async (context) => { const field = context.document.body.fields.getFirstOrNullObject(); - field.load("parentBody/text"); + field.load(["code", "result"]); await context.sync(); if (field.isNullObject) { - console.log("This document has no fields."); + console.log("There are no fields in this document."); } 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: " + field.result); } }); -'Word.Field#result:member': +'Word.FieldCollection#getFirstOrNullObject:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml From 1e7e3a9b11d55c40995e79d5e57ef50c3d750da7 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 19 May 2022 11:11:58 -0700 Subject: [PATCH 074/336] [Excel] (ExcelApi 1.15) Promote snippets from preview to GA (#637) * [Excel] (ExcelApi 1.15) Promote snippets from preview to GA * Run yarn start --- playlists-prod/excel.yaml | 62 +++++++++---------- playlists/excel.yaml | 62 +++++++++---------- .../chart-data-source.yaml | 8 +-- .../pivottable-source-data.yaml | 8 +-- .../range-dependents.yaml | 8 +-- snippet-extractor-output/snippets.yaml | 10 +-- view-prod/excel.json | 6 +- view/excel.json | 6 +- 8 files changed, 85 insertions(+), 85 deletions(-) rename samples/excel/{85-preview-apis => 10-chart}/chart-data-source.yaml (97%) rename samples/excel/{85-preview-apis => 38-pivottable}/pivottable-source-data.yaml (97%) rename samples/excel/{85-preview-apis => 42-range}/range-dependents.yaml (97%) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 0bbd5f27e..11cbb715c 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -148,6 +148,17 @@ group: Chart api_set: ExcelApi: '1.7' +- id: excel-chart-data-source + name: Chart series data source + fileName: chart-data-source.yaml + description: >- + This sample shows how to get information about the data source of a chart + series. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml + group: Chart + api_set: + ExcelApi: '1.15' - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml @@ -551,6 +562,15 @@ group: PivotTable api_set: ExcelAPI: '1.13' +- id: excel-pivottable-data-source + name: PivotTable data source + fileName: pivottable-source-data.yaml + description: Gets information about the data source of a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml + group: PivotTable + api_set: + ExcelApi: '1.15' - id: excel-range-auto-fill name: Auto fill fileName: range-auto-fill.yaml @@ -758,6 +778,17 @@ group: Range api_set: ExcelAPI: '1.13' +- id: excel-range-dependents + name: Dependents + fileName: range-dependents.yaml + description: >- + This sample shows how to find and highlight the dependents of the currently + selected cell. Dependent cells contain formulas that refer to other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml + group: Range + api_set: + ExcelAPI: '1.15' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml @@ -1159,37 +1190,6 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) -- id: excel-range-dependents - name: Dependents - fileName: range-dependents.yaml - description: >- - This sample shows how to find and highlight the dependents of the currently - selected cell. Dependent cells contain formulas that refer to other cells. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-chart-data-source - name: Chart series data source - fileName: chart-data-source.yaml - description: >- - This sample shows how to get information about the data source of a chart - series. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-pivottable-data-source - name: PivotTable data source - fileName: pivottable-source-data.yaml - description: Gets information about the data source of a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) - id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' fileName: data-types-entity-attribution.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index bcb8e98bc..feb6886fd 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -148,6 +148,17 @@ group: Chart api_set: ExcelApi: '1.7' +- id: excel-chart-data-source + name: Chart series data source + fileName: chart-data-source.yaml + description: >- + This sample shows how to get information about the data source of a chart + series. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-data-source.yaml + group: Chart + api_set: + ExcelApi: '1.15' - id: excel-chart-trendlines name: Trendlines fileName: chart-trendlines.yaml @@ -551,6 +562,15 @@ group: PivotTable api_set: ExcelAPI: '1.13' +- id: excel-pivottable-data-source + name: PivotTable data source + fileName: pivottable-source-data.yaml + description: Gets information about the data source of a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-source-data.yaml + group: PivotTable + api_set: + ExcelApi: '1.15' - id: excel-range-auto-fill name: Auto fill fileName: range-auto-fill.yaml @@ -758,6 +778,17 @@ group: Range api_set: ExcelAPI: '1.13' +- id: excel-range-dependents + name: Dependents + fileName: range-dependents.yaml + description: >- + This sample shows how to find and highlight the dependents of the currently + selected cell. Dependent cells contain formulas that refer to other cells. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-dependents.yaml + group: Range + api_set: + ExcelAPI: '1.15' - id: excel-shape-create-and-delete name: Create and delete geometric shapes fileName: shape-create-and-delete.yaml @@ -1159,37 +1190,6 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) -- id: excel-range-dependents - name: Dependents - fileName: range-dependents.yaml - description: >- - This sample shows how to find and highlight the dependents of the currently - selected cell. Dependent cells contain formulas that refer to other cells. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-chart-data-source - name: Chart series data source - fileName: chart-data-source.yaml - description: >- - This sample shows how to get information about the data source of a chart - series. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/chart-data-source.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-pivottable-data-source - name: PivotTable data source - fileName: pivottable-source-data.yaml - description: Gets information about the data source of a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-source-data.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) - id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' fileName: data-types-entity-attribution.yaml diff --git a/samples/excel/85-preview-apis/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml similarity index 97% rename from samples/excel/85-preview-apis/chart-data-source.yaml rename to samples/excel/10-chart/chart-data-source.yaml index c3faea1a6..e0c8b249b 100644 --- a/samples/excel/85-preview-apis/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -1,10 +1,10 @@ -order: 6 +order: 14 id: excel-chart-data-source name: Chart series data source description: This sample shows how to get information about the data source of a chart series. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.15' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -114,8 +114,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/excel/85-preview-apis/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml similarity index 97% rename from samples/excel/85-preview-apis/pivottable-source-data.yaml rename to samples/excel/38-pivottable/pivottable-source-data.yaml index 1bf1d64d6..1e8f7c06b 100644 --- a/samples/excel/85-preview-apis/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -1,10 +1,10 @@ -order: 6 +order: 8 id: excel-pivottable-data-source name: PivotTable data source description: Gets information about the data source of a PivotTable. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.15' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -123,8 +123,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/excel/85-preview-apis/range-dependents.yaml b/samples/excel/42-range/range-dependents.yaml similarity index 97% rename from samples/excel/85-preview-apis/range-dependents.yaml rename to samples/excel/42-range/range-dependents.yaml index 9e78dc49e..10ab3a0c4 100644 --- a/samples/excel/85-preview-apis/range-dependents.yaml +++ b/samples/excel/42-range/range-dependents.yaml @@ -1,10 +1,10 @@ -order: 5 +order: 22 id: excel-range-dependents name: Dependents description: This sample shows how to find and highlight the dependents of the currently selected cell. Dependent cells contain formulas that refer to other cells. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelAPI: '1.15' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -164,8 +164,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/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c84fc7141..225d6ae6d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -891,7 +891,7 @@ 'Excel.ChartSeries#getDimensionDataSourceString:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml await Excel.run(async (context) => { // This method retrieves the data source information of a chart series in the Sample worksheet. @@ -915,7 +915,7 @@ 'Excel.ChartSeries#getDimensionDataSourceType:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-source.yaml await Excel.run(async (context) => { // This method retrieves the data source information of a chart series in the Sample worksheet. @@ -3482,7 +3482,7 @@ 'Excel.PivotTable#getDataSourceString:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml await Excel.run(async (context) => { // This method logs information about the data source of a PivotTable. @@ -3502,7 +3502,7 @@ 'Excel.PivotTable#getDataSourceType:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml await Excel.run(async (context) => { // This method logs information about the data source of a PivotTable. @@ -3585,7 +3585,7 @@ 'Excel.Range#getDependents:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml await Excel.run(async (context) => { // This method highlights all the dependent cells of the active cell. diff --git a/view-prod/excel.json b/view-prod/excel.json index b35e848c1..27b509d6a 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -15,6 +15,7 @@ "excel-chart-series-markers": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-markers.yaml", "excel-chart-series-plotorder": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-series-plotorder.yaml", "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", @@ -58,6 +59,7 @@ "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml", + "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml", @@ -79,6 +81,7 @@ "excel-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-merged-ranges.yaml", "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-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", @@ -121,9 +124,6 @@ "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml", "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", - "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/range-dependents.yaml", - "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/chart-data-source.yaml", - "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/pivottable-source-data.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", diff --git a/view/excel.json b/view/excel.json index ef9bbaa1a..d6ca5c6ad 100644 --- a/view/excel.json +++ b/view/excel.json @@ -15,6 +15,7 @@ "excel-chart-series-markers": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series-markers.yaml", "excel-chart-series-plotorder": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/10-chart/chart-series-plotorder.yaml", "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", @@ -58,6 +59,7 @@ "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotlayout.yaml", + "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-source-data.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-areas.yaml", @@ -79,6 +81,7 @@ "excel-merged-ranges": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-merged-ranges.yaml", "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-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", @@ -121,9 +124,6 @@ "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml", "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", - "excel-range-dependents": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/range-dependents.yaml", - "excel-chart-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/chart-data-source.yaml", - "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/pivottable-source-data.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", From 7f14a3f0a3d4d4fc8d95697bb0f3f3ea62e61bcd Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 20 May 2022 10:22:57 -0700 Subject: [PATCH 075/336] [Word] (Online reqt. set) Promote snippets to GA (#639) * [Word] (Online reqt. set) Promote snippets to GA * Set order --- playlists-prod/word.yaml | 66 +++++++++---------- playlists/word.yaml | 66 +++++++++---------- .../manage-change-tracking.yaml | 5 +- .../manage-comments.yaml | 5 +- .../manage-footnotes.yaml | 5 +- snippet-extractor-output/snippets.yaml | 46 ++++++------- view-prod/word.json | 8 +-- view/word.json | 8 +-- 8 files changed, 106 insertions(+), 103 deletions(-) rename samples/word/{99-preview-apis => 50-document}/manage-change-tracking.yaml (98%) rename samples/word/{99-preview-apis => 50-document}/manage-comments.yaml (99%) rename samples/word/{99-preview-apis => 50-document}/manage-footnotes.yaml (99%) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 6b8dcc159..439431e23 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -173,6 +173,39 @@ group: Tables api_set: WordApi: '1.3' +- id: word-manage-change-tracking + name: Track changes + fileName: manage-change-tracking.yaml + description: >- + This sample shows how to get and set the change tracking mode and get the + before and after of reviewed text. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + group: Document + api_set: + WordApi: '1.4' +- id: word-manage-comments + name: Comments + fileName: manage-comments.yaml + description: >- + This sample shows how to perform basic comments operations, including + insert, reply, get, edit, resolve, and delete. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + group: Document + api_set: + WordApi: '1.4' +- id: word-manage-footnotes + name: Footnotes + fileName: manage-footnotes.yaml + description: >- + This sample shows how to perform basic footnote operations, including + insert, get, and delete. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -202,28 +235,6 @@ group: Preview APIs api_set: WordApi: '1.4' -- id: word-manage-change-tracking - name: Track changes - fileName: manage-change-tracking.yaml - description: >- - This sample shows how to get and set the change tracking mode and get the - before and after of reviewed text. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml - group: Preview APIs - api_set: - WordApi: '1.4' -- id: word-manage-comments - name: Comments - fileName: manage-comments.yaml - description: >- - This sample shows how to perform basic comments operations, including - insert, reply, get, edit, resolve, and delete. - 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.4' - id: word-manage-fields name: Get fields fileName: manage-fields.yaml @@ -231,16 +242,5 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml group: Preview APIs - api_set: - WordApi: '1.4' -- id: word-manage-footnotes - name: Footnotes - fileName: manage-footnotes.yaml - description: >- - This sample shows how to perform basic footnote operations, including - insert, get, and delete. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml - group: Preview APIs api_set: WordApi: '1.4' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index 629fe7b7a..a5d1249c7 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -173,6 +173,39 @@ group: Tables api_set: WordApi: '1.3' +- id: word-manage-change-tracking + name: Track changes + fileName: manage-change-tracking.yaml + description: >- + This sample shows how to get and set the change tracking mode and get the + before and after of reviewed text. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.yaml + group: Document + api_set: + WordApi: '1.4' +- id: word-manage-comments + name: Comments + fileName: manage-comments.yaml + description: >- + This sample shows how to perform basic comments operations, including + insert, reply, get, edit, resolve, and delete. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-comments.yaml + group: Document + api_set: + WordApi: '1.4' +- id: word-manage-footnotes + name: Footnotes + fileName: manage-footnotes.yaml + description: >- + This sample shows how to perform basic footnote operations, including + insert, get, and delete. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-footnotes.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -202,28 +235,6 @@ group: Preview APIs api_set: WordApi: '1.4' -- id: word-manage-change-tracking - name: Track changes - fileName: manage-change-tracking.yaml - description: >- - This sample shows how to get and set the change tracking mode and get the - before and after of reviewed text. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-change-tracking.yaml - group: Preview APIs - api_set: - WordApi: '1.4' -- id: word-manage-comments - name: Comments - fileName: manage-comments.yaml - description: >- - This sample shows how to perform basic comments operations, including - insert, reply, get, edit, resolve, and delete. - 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.4' - id: word-manage-fields name: Get fields fileName: manage-fields.yaml @@ -233,14 +244,3 @@ group: Preview APIs api_set: WordApi: '1.4' -- id: word-manage-footnotes - name: Footnotes - fileName: manage-footnotes.yaml - description: >- - This sample shows how to perform basic footnote operations, including - insert, get, and delete. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-footnotes.yaml - group: Preview APIs - api_set: - WordApi: '1.4' diff --git a/samples/word/99-preview-apis/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml similarity index 98% rename from samples/word/99-preview-apis/manage-change-tracking.yaml rename to samples/word/50-document/manage-change-tracking.yaml index 3aba52cf8..8649a166b 100644 --- a/samples/word/99-preview-apis/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -1,3 +1,4 @@ +order: 1 id: word-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. @@ -141,8 +142,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/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml similarity index 99% rename from samples/word/99-preview-apis/manage-comments.yaml rename to samples/word/50-document/manage-comments.yaml index 6ede84210..b78328133 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,3 +1,4 @@ +order: 2 id: word-manage-comments name: Comments description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' @@ -262,8 +263,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/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml similarity index 99% rename from samples/word/99-preview-apis/manage-footnotes.yaml rename to samples/word/50-document/manage-footnotes.yaml index 743498aed..924e9d44c 100644 --- a/samples/word/99-preview-apis/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,3 +1,4 @@ +order: 3 id: word-manage-footnotes name: Footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' @@ -232,8 +233,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/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 225d6ae6d..63a791450 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10823,7 +10823,7 @@ 'Word.Body#getComments:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let comments = context.document.body.getComments(); @@ -10983,7 +10983,7 @@ 'Word.Body#footnotes:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -11044,7 +11044,7 @@ 'Word.ChangeTrackingMode:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml await Word.run(async (context) => { const document = context.document; @@ -11062,7 +11062,7 @@ 'Word.ChangeTrackingVersion:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml await Word.run(async (context) => { const range = context.document.getSelection(); @@ -11077,7 +11077,7 @@ 'Word.Comment#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { context.document @@ -11092,7 +11092,7 @@ 'Word.Comment#getRange:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let range = context.document @@ -11108,7 +11108,7 @@ 'Word.Comment#reply:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let text = $("#reply-text") @@ -11128,7 +11128,7 @@ 'Word.Comment#content:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let text = $("#edit-comment-text") @@ -11150,7 +11150,7 @@ 'Word.Comment#resolved:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let comment = context.document @@ -11174,7 +11174,7 @@ 'Word.CommentCollection#getFirst:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let range = context.document @@ -11190,7 +11190,7 @@ 'Word.CommentCollection#items:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let text = $("#reply-text") @@ -11391,7 +11391,7 @@ 'Word.Document#changeTrackingMode:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml await Word.run(async (context) => { const document = context.document; @@ -11539,7 +11539,7 @@ 'Word.NoteItem#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -11556,7 +11556,7 @@ 'Word.NoteItem#getNext:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -11572,7 +11572,7 @@ 'Word.NoteItem#body:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -11590,7 +11590,7 @@ 'Word.NoteItem#reference:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -11609,7 +11609,7 @@ 'Word.NoteItem#type:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -11624,7 +11624,7 @@ 'Word.NoteItemCollection#getFirst:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { let reference = context.document.body.footnotes.getFirst().reference; @@ -11817,7 +11817,7 @@ 'Word.Range#getComments:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let comments = context.document.getSelection().getComments(); @@ -11832,7 +11832,7 @@ 'Word.Range#getReviewedText:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml await Word.run(async (context) => { const range = context.document.getSelection(); @@ -11877,7 +11877,7 @@ 'Word.Range#insertComment:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml await Word.run(async (context) => { let text = $("#comment-text") @@ -11919,7 +11919,7 @@ 'Word.Range#insertFootnote:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const text = $("#input-footnote") @@ -11933,7 +11933,7 @@ 'Word.Range#footnotes:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml await Word.run(async (context) => { const footnotes = context.document.getSelection().footnotes; diff --git a/view-prod/word.json b/view-prod/word.json index 7200c12b7..93f3307a1 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -18,11 +18,11 @@ "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml", + "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml", + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml", + "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", - "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-change-tracking.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-comments.yaml", - "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml", - "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-footnotes.yaml" + "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 70b6bcc63..93d4f765b 100644 --- a/view/word.json +++ b/view/word.json @@ -18,11 +18,11 @@ "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml", + "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.yaml", + "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-comments.yaml", + "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-footnotes.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", - "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-change-tracking.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-comments.yaml", - "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-fields.yaml", - "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-footnotes.yaml" + "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-fields.yaml" } \ No newline at end of file From 6b1c1fce84451dacd1ae14d7cfc0869c703943df Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 23 May 2022 10:55:17 -0700 Subject: [PATCH 076/336] [Word] (setup) Clean up (#642) * [Word] (setup) Clean up * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Update per feedback Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- .../insert-and-change-content-controls.yaml | 11 ++++++----- samples/word/15-images/insert-and-get-pictures.yaml | 7 ++++--- samples/word/20-lists/insert-list.yaml | 11 ++++++----- .../get-paragraph-on-insertion-point.yaml | 7 ++++--- samples/word/25-paragraph/get-word-count.yaml | 7 ++++--- .../25-paragraph/insert-in-different-locations.yaml | 7 ++++--- .../25-paragraph/insert-line-and-page-breaks.yaml | 7 ++++--- samples/word/25-paragraph/paragraph-properties.yaml | 11 ++++++----- samples/word/25-paragraph/search.yaml | 7 ++++--- samples/word/35-ranges/scroll-to-range.yaml | 7 ++++--- .../35-ranges/split-words-of-first-paragraph.yaml | 7 ++++--- samples/word/50-document/manage-change-tracking.yaml | 7 ++++--- samples/word/50-document/manage-comments.yaml | 7 ++++--- samples/word/50-document/manage-footnotes.yaml | 7 ++++--- samples/word/90-scenarios/multiple-property-set.yaml | 7 ++++--- .../content-control-ondeleted-event.yaml | 11 ++++++----- samples/word/99-preview-apis/manage-fields.yaml | 2 +- 17 files changed, 73 insertions(+), 57 deletions(-) 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 11ce1a84e..691a25fa0 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 @@ -72,14 +72,15 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph("One more paragraph. ", "Start"); - context.document.body.insertParagraph("Inserting another paragraph. ", "Start"); - context.document.body.insertParagraph( + const body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph. ", "Start"); + body.insertParagraph("Inserting another paragraph. ", "Start"); + 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" ); - context.document.body.paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries. ", diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index f2d2e0490..4c166b1b8 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -49,12 +49,13 @@ script: */ async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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. ", "End" ); - context.document.body.paragraphs + 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 elements you want from the different Online galleries.", diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 660b30415..c1478883f 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -37,20 +37,21 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + const body = context.document.body; + body.clear(); + 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. ", "Start" ); - context.document.body.insertParagraph( + body.insertParagraph( "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" ); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries. ", 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 e5aa023ca..25631b607 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -53,12 +53,13 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 23affcac2..24f05f299 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -60,12 +60,13 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.insertParagraph( + 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" ); diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 144f50bc3..791452d49 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -81,12 +81,13 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", 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 03dcbe85f..3b370491a 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -32,12 +32,13 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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 elements you want from the different Online galleries.", diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 525b97c2d..dbc107e96 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -52,19 +52,20 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", "Replace" ); - context.document.body.paragraphs.getFirst().alignment = "Left"; - context.document.body.paragraphs.getLast().alignment = "Left"; + body.paragraphs.getFirst().alignment = "Left"; + body.paragraphs.getLast().alignment = "Left"; }); } diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index f6d37bc1d..0f7d546a1 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -49,12 +49,13 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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 ($10,000.00), 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" ); - context.document.body.paragraphs + 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.", diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index d91ac37ed..94742de62 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -32,13 +32,14 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - let firstSentence = context.document.body.insertParagraph( + const body = context.document.body; + body.clear(); + const firstSentence = 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" ); firstSentence.insertBreak(Word.BreakType.page, "After"); - context.document.body.paragraphs + 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.", 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 b0ed4a52c..dca0ff1df 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -37,12 +37,13 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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.", diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 8649a166b..d2263eafe 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -64,12 +64,13 @@ script: /** Set two paragraphs of sample text. */ async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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.", diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index b78328133..f94446dc1 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -157,12 +157,13 @@ script: /** Set two paragraphs of sample text. */ async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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.", diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 924e9d44c..1c4e871a1 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -136,12 +136,13 @@ script: /** Set two paragraphs of sample text. */ async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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.", diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index d67bf9373..f10ced3f4 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -43,12 +43,13 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph( + 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" ); - context.document.body.paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", 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 75eb6901b..9735ebfe7 100644 --- a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml +++ b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml @@ -96,14 +96,15 @@ script: async function setup() { await Word.run(async (context) => { - context.document.body.clear(); - context.document.body.insertParagraph("One more paragraph. ", "Start"); - context.document.body.insertParagraph("Inserting another paragraph. ", "Start"); - context.document.body.insertParagraph( + const body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph. ", "Start"); + body.insertParagraph("Inserting another paragraph. ", "Start"); + 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" ); - context.document.body.paragraphs + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries. ", diff --git a/samples/word/99-preview-apis/manage-fields.yaml b/samples/word/99-preview-apis/manage-fields.yaml index 6503b5e5c..f97e17ce0 100644 --- a/samples/word/99-preview-apis/manage-fields.yaml +++ b/samples/word/99-preview-apis/manage-fields.yaml @@ -65,7 +65,7 @@ script: async function setup() { await Word.run(async (context) => { - let body = context.document.body; + 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.", From f65c7d4947228e1b2c4356ce5a84f4e5b361f417 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 23 May 2022 14:20:17 -0700 Subject: [PATCH 077/336] [Word] (online) Check for WordApiOnline 1.1 requirement set (#644) * [Word] (online) Check for WordApiOnline 1.1 requirement set * Update based on discussion feedback --- .../word/50-document/manage-change-tracking.yaml | 13 +++++++++++-- samples/word/50-document/manage-comments.yaml | 10 ++++++++-- samples/word/50-document/manage-footnotes.yaml | 11 ++++++++++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index d2263eafe..645a228aa 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -61,8 +61,14 @@ script: }); } - /** Set two paragraphs of sample text. */ + /** Check for requirement set support and set two paragraphs of sample text. */ async function setup() { + 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 change tracking APIs." + ); + return; + } await Word.run(async (context) => { const body = context.document.body; body.clear(); @@ -93,8 +99,11 @@ template: content: |-

This sample shows basic operations of the Track Changes feature.

+

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

-

Set up

+

This sample demonstrates how to get fields, which are placeholders for dynamic data in your document. To learn + more + about fields, refer to Insert, + edit, and view fields in Word.

+

Set up

diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 1c4e871a1..8fee891e3 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -133,8 +133,14 @@ script: console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); } - /** Set two paragraphs of sample text. */ + /** Check for requirement set support and set two paragraphs of sample text. */ async function setup() { + 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; + } await Word.run(async (context) => { const body = context.document.body; body.clear(); @@ -164,6 +170,9 @@ template: content: |-

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.

From da9541a2618ae0d33705f2d4be21f58fe48de569 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 2 Jun 2022 12:10:59 -0700 Subject: [PATCH 078/336] [Excel] (Data types) Add preview sample for custom functions integration (#646) * Added excel-data-types-custom-functions sample (#633) * Adjust and expand comments, simplify sample JSON data * Update comments, run yarn start * Incorporate code review feedback, update completeMatch param * Fix param name mismatch Co-authored-by: Jakob Nielsen-MSFT --- playlists-prod/excel.yaml | 11 + playlists/excel.yaml | 11 + .../data-types-custom-functions.yaml | 334 ++++++++++++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 5 files changed, 358 insertions(+) create mode 100644 samples/excel/85-preview-apis/data-types-custom-functions.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 11cbb715c..caeca49bc 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1190,6 +1190,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-custom-functions + name: 'Data types: Custom functions' + fileName: data-types-custom-functions.yaml + description: >- + This sample shows how to write custom functions that return entity value + data types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-custom-functions.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' fileName: data-types-entity-attribution.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index feb6886fd..9db44057a 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1190,6 +1190,17 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-custom-functions + name: 'Data types: Custom functions' + fileName: data-types-custom-functions.yaml + description: >- + This sample shows how to write custom functions that return entity value + data types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-custom-functions.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' fileName: data-types-entity-attribution.yaml diff --git a/samples/excel/85-preview-apis/data-types-custom-functions.yaml b/samples/excel/85-preview-apis/data-types-custom-functions.yaml new file mode 100644 index 000000000..4ee30115c --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-custom-functions.yaml @@ -0,0 +1,334 @@ +order: 5 +id: excel-data-types-custom-functions +name: 'Data types: Custom functions' +description: This sample shows how to write custom functions that return entity value data types. +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: | + /** + * Search for products that match a given substring. Try =SCRIPTLAB.DATATYPESCUSTOMFUNCTIONS.PRODUCTSEARCH("chef", false). + * @customfunction + * @param {string} query The string to search for in the sample JSON data. + * @param {boolean} [completeMatch] Define whether the search should be a match of the whole product name or part of the product name. If omitted, completeMatch = false. + * @return {Promise} Search results as one or more data type entity values. + */ + async function productSearch(query: string, completeMatch?: boolean): Promise { + // This method searches a set of sample JSON data for the string entered in the + // custom function, and then returns the search result as one or more entity values. + + // Set up an error to use if a matching product doesn't exist in the JSON data. + const notAvailableError = { + type: "Error", + errorType: "NotAvailable" + }; + + // Search the sample JSON data for matching product names. + try { + if (completeMatch === null) { + completeMatch = false + } + + console.log(`Searching for ${query}...`); + const searchResult = await searchProduct(query, completeMatch); + + // If the search result is empty, return the error. + if (searchResult.length == 0) { + return [[notAvailableError]]; + } + + // Create product entities for each of the products returned in the search result. + const entities = searchResult.map((product) => [makeProductEntity(product)]); + return entities; + } catch (error) { + console.error(error); + } + } + + // Helper method to create entities from product properties. + function makeProductEntity(product?: any) { + const entity: Excel.EntityCellValue = { + type: "Entity", + text: product.productName, + properties: { + "Product ID": { + type: "String", + basicValue: product.productID.toString() || "" + }, + "Product Name": { + type: "String", + basicValue: product.productName || "" + }, + "Quantity Per Unit": { + type: "String", + basicValue: product.quantityPerUnit || "" + }, + // Add Unit Price as a formatted number. + "Unit Price": { + type: "FormattedNumber", + basicValue: product.unitPrice, + numberFormat: "$* #,##0.00" + }, + Discontinued: { + type: "Boolean", + basicValue: product.discontinued || false + } + }, + layouts: { + card: { + title: { property: "Product Name" }, + sections: [ + { + layout: "List", + properties: ["Product ID"] + }, + { + layout: "List", + title: "Quantity and price", + collapsible: true, + collapsed: false, + properties: ["Quantity Per Unit", "Unit Price"] + }, + { + layout: "List", + title: "Additional information", + collapsed: true, + properties: ["Discontinued"] + } + ] + } + } + }; + + // Add image property to the entity and then add it to the card layout. + if (product.productImage) { + entity.properties["Image"] = { + type: "WebImage", + address: product.productImage || "" + }; + entity.layouts.card.mainImage = { property: "Image" }; + } + + return entity; + } + + // Helper method to search the sample JSON product data. + function searchProduct(query: string, completeMatch: boolean): any { + const queryUpperCase = query.toUpperCase(); + if (completeMatch === true) { + return products.filter((p) => p.productName.toUpperCase() === queryUpperCase); + } else { + return products.filter((p) => p.productName.toUpperCase().indexOf(queryUpperCase) >= 0); + } + } + + /** Sample JSON product data. */ + const products = [ + { + productID: 1, + productName: "Chai", + supplierID: 1, + categoryID: 1, + quantityPerUnit: "10 boxes x 20 bags", + unitPrice: 18, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Masala_Chai.JPG/320px-Masala_Chai.JPG" + }, + { + productID: 2, + productName: "Chang", + supplierID: 1, + categoryID: 1, + quantityPerUnit: "24 - 12 oz bottles", + unitPrice: 19, + discontinued: false, + productImage: "" + }, + { + productID: 3, + productName: "Aniseed Syrup", + supplierID: 1, + categoryID: 2, + quantityPerUnit: "12 - 550 ml bottles", + unitPrice: 10, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/Maltose_syrup.jpg/185px-Maltose_syrup.jpg" + }, + { + productID: 4, + productName: "Chef Anton's Cajun Seasoning", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "48 - 6 oz jars", + unitPrice: 22, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Kruidenmengeling-spice.jpg/193px-Kruidenmengeling-spice.jpg" + }, + { + productID: 5, + productName: "Chef Anton's Gumbo Mix", + supplierID: 2, + categoryID: 2, + quantityPerUnit: "36 boxes", + unitPrice: 21.35, + discontinued: true, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Okra_in_a_Bowl_%28Unsplash%29.jpg/180px-Okra_in_a_Bowl_%28Unsplash%29.jpg" + }, + { + productID: 6, + productName: "Grandma's Boysenberry Spread", + supplierID: 3, + categoryID: 2, + quantityPerUnit: "12 - 8 oz jars", + unitPrice: 25, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/1/10/Making_cranberry_sauce_-_in_the_jar.jpg/90px-Making_cranberry_sauce_-_in_the_jar.jpg" + }, + { + productID: 7, + productName: "Uncle Bob's Organic Dried Pears", + supplierID: 3, + categoryID: 7, + quantityPerUnit: "12 - 1 lb pkgs.", + unitPrice: 30, + discontinued: false, + productImage: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/DriedPears.JPG/120px-DriedPears.JPG" + }, + { + productID: 8, + productName: "Northwoods Cranberry Sauce", + supplierID: 3, + categoryID: 2, + quantityPerUnit: "12 - 12 oz jars", + unitPrice: 40, + discontinued: false, + productImage: + "https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Making_cranberry_sauce_-_stovetop.jpg/90px-Making_cranberry_sauce_-_stovetop.jpg" + }, + { + productID: 9, + productName: "Mishi Kobe Niku", + supplierID: 4, + categoryID: 6, + quantityPerUnit: "18 - 500 g pkgs.", + unitPrice: 97, + discontinued: true, + productImage: "" + }, + { + productID: 10, + productName: "Ikura", + supplierID: 4, + categoryID: 8, + quantityPerUnit: "12 - 200 ml jars", + unitPrice: 31, + discontinued: false, + productImage: "" + }, + ]; + + const categories = [ + { + categoryID: 1, + categoryName: "Beverages", + description: "Soft drinks, coffees, teas, beers, and ales" + }, + { + categoryID: 2, + categoryName: "Condiments", + description: "Sweet and savory sauces, relishes, spreads, and seasonings" + }, + { + categoryID: 3, + categoryName: "Confections", + description: "Desserts, candies, and sweet breads" + }, + { + categoryID: 4, + categoryName: "Dairy Products", + description: "Cheeses" + }, + { + categoryID: 5, + categoryName: "Grains/Cereals", + description: "Breads, crackers, pasta, and cereal" + }, + { + categoryID: 6, + categoryName: "Meat/Poultry", + description: "Prepared meats" + }, + { + categoryID: 7, + categoryName: "Produce", + description: "Dried fruit and bean curd" + }, + { + categoryID: 8, + categoryName: "Seafood", + description: "Seaweed and fish" + } + ]; + + const suppliers = [ + { + supplierID: 1, + companyName: "Exotic Liquids", + contactName: "Charlotte Cooper", + contactTitle: "Purchasing Manager" + }, + { + supplierID: 2, + companyName: "New Orleans Cajun Delights", + contactName: "Shelley Burke", + contactTitle: "Order Administrator" + }, + { + supplierID: 3, + companyName: "Grandma Kelly's Homestead", + contactName: "Regina Murphy", + contactTitle: "Sales Representative" + }, + { + supplierID: 4, + companyName: "Tokyo Traders", + contactName: "Yoshi Nagase", + contactTitle: "Marketing Manager", + address: "9-8 Sekimai Musashino-shi" + }, + { + supplierID: 5, + companyName: "Cooperativa de Quesos 'Las Cabras'", + contactName: "Antonio del Valle Saavedra", + contactTitle: "Export Administrator" + }, + { + supplierID: 6, + companyName: "Mayumi's", + contactName: "Mayumi Ohno", + contactTitle: "Marketing Representative" + }, + { + supplierID: 7, + companyName: "Pavlova, Ltd.", + contactName: "Ian Devling", + contactTitle: "Marketing Manager" + }, + { + supplierID: 8, + companyName: "Specialty Biscuits, Ltd.", + contactName: "Peter Wilson", + contactTitle: "Sales Representative" + } + ]; + language: typescript +libraries: |- + https://appsforoffice.microsoft.com/lib/beta/hosted/office.js + @types/office-js-preview + + core-js@2.4.1/client/core.min.js + @types/core-js \ No newline at end of file diff --git a/view-prod/excel.json b/view-prod/excel.json index 27b509d6a..76d32b936 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -124,6 +124,7 @@ "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml", "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", + "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-custom-functions.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", diff --git a/view/excel.json b/view/excel.json index d6ca5c6ad..571cc0dd6 100644 --- a/view/excel.json +++ b/view/excel.json @@ -124,6 +124,7 @@ "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml", "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml", "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", + "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-custom-functions.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", From 1497f537120f12723fc3b75c8ad291dafdc1473f Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Tue, 7 Jun 2022 13:21:17 -0700 Subject: [PATCH 079/336] [Excel] (Data types) Add preview sample for entity value references (#635) * Added data-types-references sample (#634) * Adding stylistic change from Jakob per request * Whitespace changes, minor grammar adjustments * Add definition of reference * Add definition of reference * Expand comments to clarify purpose * Change gender dynamics of employee data, give VP a female name * Run yarn start * Change order numbers to avoid conflict * Adjust comments * Grammar change * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Adjust description of reference, per feeback * Remove null value check, per feedback * Run yarn start * Update steps to view referenced entities * Sentence simplification Co-authored-by: Jakob Nielsen-MSFT Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 13 + playlists/excel.yaml | 13 + .../data-types-entity-attribution.yaml | 2 +- .../data-types-references.yaml | 346 ++++++++++++++++++ view-prod/excel.json | 1 + view/excel.json | 1 + 6 files changed, 375 insertions(+), 1 deletion(-) create mode 100644 samples/excel/85-preview-apis/data-types-references.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index caeca49bc..eb7059526 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -1212,6 +1212,19 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-references + name: 'Data types: Entity values with references' + fileName: data-types-references.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-references.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 9db44057a..57796f4e1 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -1212,6 +1212,19 @@ group: Preview APIs api_set: ExcelApi: BETA (PREVIEW ONLY) +- id: excel-data-types-references + name: 'Data types: Entity values with references' + fileName: data-types-references.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-references.yaml + group: Preview APIs + api_set: + ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/data-types-entity-attribution.yaml b/samples/excel/85-preview-apis/data-types-entity-attribution.yaml index fdd1c7ad5..8280b9983 100644 --- a/samples/excel/85-preview-apis/data-types-entity-attribution.yaml +++ b/samples/excel/85-preview-apis/data-types-entity-attribution.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 6 id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' description: This sample shows how to set data provider attributions on entity values in the card layout. diff --git a/samples/excel/85-preview-apis/data-types-references.yaml b/samples/excel/85-preview-apis/data-types-references.yaml new file mode 100644 index 000000000..595e59e53 --- /dev/null +++ b/samples/excel/85-preview-apis/data-types-references.yaml @@ -0,0 +1,346 @@ +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.' +host: EXCEL +api_set: + ExcelApi: BETA (PREVIEW ONLY) +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#add-entities-to-table").click(() => tryCatch(addEntitiesToTable)); + + async function addEntitiesToTable() { + await Excel.run(async (context) => { + // This method creates entity values with references to other entity values. + // It retrieves data for each of the employees in the table on the worksheet, + // creates entity values for each of those employees, and adds the entities + // to the table. Each employee entity references (or contains) other + // employee entities. In this scenario, the purpose of one employee + // referencing another is to show a managerial hierarchy. + + const employeesTable = context.workbook.tables.getItem("EmployeesTable"); + + // Refresh the table column with the entity values. + employeesTable.columns.getItemOrNullObject("Employee").delete(); + const employeeColumn = employeesTable.columns.add(0, null, "Employee"); + + // Get employee data from the table. + const dataRange = employeesTable.getDataBodyRange(); + dataRange.load("values"); + await context.sync(); + + // Create the entities by mapping the employee IDs in table to the sample + // JSON employee data. + const entities = dataRange.values.map((rowValues) => { + // Get employee properties. + const employee = getEmployee(rowValues[1] /* Employee ID */); + + // Collect all the references that are needed to make the employee entity. + const references = collectReferences(employee); + + // Create employee entity from employee properties. + const employeeEntity = makeEmployeeEntity( + rowValues[2], /* Last name */ + rowValues[3], /* First name */ + employee, + references + ); + + // Collect reference values for the employee entity. + const referencedValues: any[] = [{ type: "Root" }]; + references.slice(1).forEach((id) => { + const referencedEmployee = getEmployee(id); + referencedValues.push( + makeEmployeeEntity(referencedEmployee.lastName, referencedEmployee.firstName, referencedEmployee, references) + ); + }); + employeeEntity.referencedValues = referencedValues; + + return [employeeEntity]; + }); + + // Add the complete entities to the Employees Table. + employeeColumn.getDataBodyRange().valuesAsJson = entities; + employeeColumn.getRange().format.autofitColumns(); + await context.sync(); + }); + } + + // Helper method to collect all the references for the employee entity. + // A reference means one entity contains another entity. + function collectReferences(employee) { + const references: number[] = []; + collectManagerReferences(employee, references); + return references; + } + + // Helper method to collect manager and direct report references for each employee entity. + function collectManagerReferences(employee, references: number[]) { + // Confirm references haven't already been collected for this employee. + if (references.indexOf(employee.employeeID) >= 0) { + return; + } + + // Record the reference for the employee. + ensureReferenceExist(references, employee.employeeID); + + // Record the reference for the manager, if the employee has a manager. + if (employee.reportsTo != null) { + // Get the manager. + const manager = getEmployee(employee.reportsTo); + // Collect references for the manager. + collectManagerReferences(manager, references); + } + + // Collect references for each of the direct reports of the employee, if any. + const directReports = employee.directReports || getDirectReports(employee.employeeID); + if (directReports.length > 0) { + directReports.forEach((direct) => collectManagerReferences(direct, references)); + } + } + + // Helper method to check whether a specific reference ID exists in a list of IDs. + // If the ID doesn't exist, add it to the list. + function ensureReferenceExist(list: number[], id: number) { + if (list.indexOf(id) < 0) { + list.push(id); + } + } + + // Create entities from employee properties. + function makeEmployeeEntity(lastName: string, firstName: string, employee: any, references: number[]): Excel.EntityCellValue { + const entity: Excel.EntityCellValue = { + type: Excel.CellValueType.entity, + text: `${firstName} ${lastName}`, + properties: { + "Employee ID": { + type: Excel.CellValueType.string, + basicValue: employee.employeeID.toString() + }, + "Last Name": { + type: Excel.CellValueType.string, + basicValue: lastName + }, + "First Name": { + type: Excel.CellValueType.string, + basicValue: firstName + }, + Name: { + type: Excel.CellValueType.string, + basicValue: `${firstName} ${lastName}` + }, + Title: { + type: Excel.CellValueType.string, + basicValue: employee.title + } + }, + layouts: { + card: { + title: { property: "Name" }, + sections: [ + { + layout: "List", + properties: ["Employee ID", "First Name", "Last Name", "Title"] + } + ] + } + } + }; + + // Add manager reference, if the employee has a manager. + if (employee.reportsTo != null) { + entity.properties["Manager"] = { + type: "Reference", + reference: references.indexOf(employee.reportsTo) + }; + entity.layouts.card.sections[0].properties.push("Manager"); + } + + // Add references for direct reports, if any. + if (employee.directReports.length > 0) { + entity.properties["Direct Reports"] = { + type: Excel.CellValueType.array, + elements: employee.directReports.map((direct) => { + return [ + { + type: "Reference", + reference: references.indexOf(direct.employeeID) + } + ]; + }), + }; + entity.layouts.card.sections[0].properties.push("Direct Reports"); + } + + return entity; + } + + // Get employee properties. + function getEmployee(employeeID: number): any { + // Find the employee in the sample data. + const employee = employees.find((e) => e.employeeID === employeeID); + + // Add direct reports for the employee. + employee["directReports"] = getDirectReports(employeeID); + return employee; + } + + // Get direct reports of employee. + function getDirectReports(employeeID: number): any { + return employees.filter((e) => e.reportsTo === employeeID); + } + + /** Set up Sample worksheet with a table of employee data. */ + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const employeesTable = sheet.tables.add("A1:D1", true /* hasHeaders */); + employeesTable.name = "EmployeesTable"; + + employeesTable.getHeaderRowRange().values = [["Employee", "EmployeeID", "LastName", "FirstName"]]; + + employeesTable.rows.add( + null /* Add at the end. */, + employees.map((e) => [null, e.employeeID, e.lastName, e.firstName]) + ); + + 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); + } + } + + /** Sample JSON employee data. */ + const employees = [ + { + employeeID: 1, + lastName: "Davolio", + firstName: "Nancy", + title: "Vice President, Sales", + reportsTo: null + }, + { + employeeID: 2, + lastName: "Fuller", + firstName: "Andrew", + title: "Sales Representative", + reportsTo: 1 + }, + { + employeeID: 3, + lastName: "Leverling", + firstName: "Janet", + title: "Sales Representative", + reportsTo: 4 + }, + { + employeeID: 4, + lastName: "Peacock", + firstName: "Margaret", + title: "Sales Manager", + reportsTo: 1 + }, + { + employeeID: 5, + lastName: "Buchanan", + firstName: "Steven", + title: "Sales Representative", + reportsTo: 4 + }, + { + employeeID: 6, + lastName: "Suyama", + firstName: "Michael", + title: "Sales Representative", + reportsTo: 4 + }, + { + employeeID: 7, + lastName: "King", + firstName: "Robert", + title: "Sales Representative", + reportsTo: 4 + }, + { + employeeID: 8, + lastName: "Callahan", + firstName: "Laura", + title: "Inside Sales Coordinator", + reportsTo: 1 + }, + { + employeeID: 9, + lastName: "Dodsworth", + firstName: "Anne", + title: "Sales Representative", + reportsTo: 4 + } + ]; + language: typescript +template: + 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.

+
+
+

Set up

+ +
+
+

Try it out

+

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

+
    +
  1. Select Add entity values to add entity values to the table. +

  2. +
  3. Open the Andrew Fuller entity card by selecting the icon to the left of this name in the Employee column.
  4. +
  5. In the Andrew Fuller entity card, select the Manager field. This opens the referenced entity for Nancy Davolio.
  6. +
  7. The referenced Nancy Davolio entity itself contains multiple referenced entities in the Direct Reports field. Select the Direct Reports field to explore the referenced entities for all the employees that report to Nancy Davolio.
  8. +
  9. To navigate back to the original Andrew Fuller entity, select the Back arrow in the top left corner of the entity card.
  10. +
+

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: | + 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/excel.json b/view-prod/excel.json index 76d32b936..487fbea0b 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -126,6 +126,7 @@ "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-custom-functions.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", + "excel-data-types-references": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-references.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 571cc0dd6..03829975f 100644 --- a/view/excel.json +++ b/view/excel.json @@ -126,6 +126,7 @@ "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-custom-functions.yaml", "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", + "excel-data-types-references": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-references.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From 3c2602e64934404b7dfd471c891863227493891f Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 7 Jun 2022 14:19:45 -0700 Subject: [PATCH 080/336] [Outlook] (EWS) Gets appointment's iCalUId as the organizer (#649) * Gets appointment's iCalUId if user is the organizer * Correct description * Apply review suggestion Co-authored-by: Elizabeth Samuel Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 11 +++ playlists/outlook.yaml | 11 +++ .../get-icaluid-as-organizer.yaml | 85 +++++++++++++++++++ .../item-id-compose.yaml | 2 +- view-prod/outlook.json | 1 + view/outlook.json | 1 + 6 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 875e32b92..149bb3a48 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -459,6 +459,17 @@ group: Tokens And Service Calls api_set: Mailbox: '1.1' +- id: outlook-tokens-and-service-calls-get-icaluid-as-organizer + name: Get an appointment's iCalUId as an organizer + fileName: get-icaluid-as-organizer.yaml + description: >- + Uses 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 + api_set: + Mailbox: '1.3' - id: outlook-tokens-and-service-calls-item-id-compose name: Get an item ID in compose mode fileName: item-id-compose.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 520c4ac22..ccecc7850 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -459,6 +459,17 @@ group: Tokens And Service Calls api_set: Mailbox: '1.1' +- id: outlook-tokens-and-service-calls-get-icaluid-as-organizer + name: Get an appointment's iCalUId as an organizer + fileName: get-icaluid-as-organizer.yaml + description: >- + Uses 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 + api_set: + Mailbox: '1.3' - id: outlook-tokens-and-service-calls-item-id-compose name: Get an item ID in compose mode fileName: item-id-compose.yaml 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 new file mode 100644 index 000000000..9632cf320 --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-organizer.yaml @@ -0,0 +1,85 @@ +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. +host: OUTLOOK +api_set: + Mailbox: '1.3' +script: + content: | + $("#run").click(run); + + function run() { + Office.context.mailbox.item.saveAsync((result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + const ewsId = result.value; + const request = ` + + + + + AllProperties + + + + + + + `; + + Office.context.mailbox.makeEwsRequestAsync(request, (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + + console.log(getUID(result.value)); + }); + }); + } + + function getUID(xmlResult) { + const parser = new DOMParser(); + const xmlText = parser.parseFromString(xmlResult, "text/xml"); + return xmlText.getElementsByTagName("t:UID")[0].childNodes[0].nodeValue; + } + language: typescript +template: + content: | +
+

This sample shows how to get an appointment's iCalUId value if the user is the 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/85-tokens-and-service-calls/item-id-compose.yaml b/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml index ad0ec35f9..a797444d4 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 @@ -1,4 +1,4 @@ -order: 8 +order: 10 id: outlook-tokens-and-service-calls-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.' diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 0023bdfcf..72ff9fa90 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -48,6 +48,7 @@ "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-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", diff --git a/view/outlook.json b/view/outlook.json index a76f35c2b..7074f0da9 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -48,6 +48,7 @@ "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-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", From d6641347b1d0ce3af88c5fb65f95523081140563 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 7 Jun 2022 14:20:55 -0700 Subject: [PATCH 081/336] [Outlook] (EWS) Gets an appointment's iCalUId as an attendee (#648) * Gets an appointment's iCalUId as an attendee * Correct description * Correct API requirement set * Apply review suggestion Co-authored-by: Elizabeth Samuel Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 11 +++ playlists/outlook.yaml | 11 +++ .../get-icaluid-as-attendee.yaml | 81 +++++++++++++++++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 5 files changed, 105 insertions(+) create mode 100644 samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 149bb3a48..b857aa6a9 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -479,6 +479,17 @@ group: Tokens And Service Calls api_set: Mailbox: '1.8' +- id: outlook-tokens-and-service-calls-get-icaluid-as-attendee + 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. + 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-other-item-apis-get-subject-read name: Get the subject (Read) fileName: get-subject-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index ccecc7850..cd19db2bb 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -479,6 +479,17 @@ group: Tokens And Service Calls api_set: Mailbox: '1.8' +- id: outlook-tokens-and-service-calls-get-icaluid-as-attendee + 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. + 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-other-item-apis-get-subject-read name: Get the subject (Read) fileName: get-subject-read.yaml 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 new file mode 100644 index 000000000..fbc5444b7 --- /dev/null +++ b/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml @@ -0,0 +1,81 @@ +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. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#run").click(run); + + function run() { + const ewsId = Office.context.mailbox.item.itemId; + const request = ` + + + + + AllProperties + + + + + + + `; + + Office.context.mailbox.makeEwsRequestAsync(request, (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } + + console.log(getUID(result.value)); + }); + } + + function getUID(xmlResult) { + const parser = new DOMParser(); + const xmlText = parser.parseFromString(xmlResult, "text/xml"); + return xmlText.getElementsByTagName("t:UID")[0].childNodes[0].nodeValue; + } + language: typescript +template: + content: | +
+

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

+
+ +
+

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/view-prod/outlook.json b/view-prod/outlook.json index 72ff9fa90..9c82cf2c9 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -50,6 +50,7 @@ "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-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.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-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-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", diff --git a/view/outlook.json b/view/outlook.json index 7074f0da9..cb024458a 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -50,6 +50,7 @@ "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-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/item-id-compose.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-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-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", From e078dccc3b71856edc04ff42d2e79cd7c6ea2608 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 7 Jun 2022 14:28:37 -0700 Subject: [PATCH 082/336] Run yarn start --- playlists-prod/outlook.yaml | 18 +++++++++--------- playlists/outlook.yaml | 18 +++++++++--------- .../get-icaluid-as-organizer.yaml | 2 +- view-prod/outlook.json | 2 +- view/outlook.json | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index b857aa6a9..c4101cd58 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -470,15 +470,6 @@ group: Tokens And Service Calls api_set: Mailbox: '1.3' -- 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-tokens-and-service-calls-get-icaluid-as-attendee name: Get an appointment's iCalUId as an attendee fileName: get-icaluid-as-attendee.yaml @@ -490,6 +481,15 @@ 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 diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index cd19db2bb..4be35c1f5 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -470,15 +470,6 @@ group: Tokens And Service Calls api_set: Mailbox: '1.3' -- 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-tokens-and-service-calls-get-icaluid-as-attendee name: Get an appointment's iCalUId as an attendee fileName: get-icaluid-as-attendee.yaml @@ -490,6 +481,15 @@ 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 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 9632cf320..2b2503008 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 @@ -33,7 +33,7 @@ script: Office.context.mailbox.makeEwsRequestAsync(request, (result) => { if (result.status === Office.AsyncResultStatus.Failed) { - console.log(result.error.message); + console.error(result.error.message); return; } diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 9c82cf2c9..dd8afa300 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -49,8 +49,8 @@ "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-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.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-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", diff --git a/view/outlook.json b/view/outlook.json index cb024458a..e2d6d3fcd 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -49,8 +49,8 @@ "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-item-id-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/85-tokens-and-service-calls/item-id-compose.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-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", From 2afc1a9e0d954d659048a782d6a0ea6bec8289d8 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 13 Jun 2022 09:34:47 -0700 Subject: [PATCH 083/336] [Word] (document) How to insert section breaks (#651) * [Word] (document) How to insert section breaks * Update samples/word/50-document/insert-section-breaks.yaml Co-authored-by: David Chesnut * Metadata mapping Co-authored-by: David Chesnut --- playlists-prod/word.yaml | 15 +- playlists/word.yaml | 15 +- .../50-document/insert-section-breaks.yaml | 145 ++++++++++++++++++ .../50-document/manage-change-tracking.yaml | 4 +- samples/word/50-document/manage-comments.yaml | 4 +- .../word/50-document/manage-footnotes.yaml | 4 +- snippet-extractor-metadata/word.xlsx | Bin 14669 -> 14760 bytes snippet-extractor-output/snippets.yaml | 30 ++++ view-prod/word.json | 7 +- view/word.json | 7 +- 10 files changed, 213 insertions(+), 18 deletions(-) create mode 100644 samples/word/50-document/insert-section-breaks.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 439431e23..76b22c9dc 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -173,7 +173,16 @@ group: Tables api_set: WordApi: '1.3' -- id: word-manage-change-tracking +- id: word-document-insert-section-breaks + name: Add a section + fileName: insert-section-breaks.yaml + description: Shows how to insert section breaks in the document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml + group: Document + api_set: + WordApi: '1.1' +- id: word-document-manage-change-tracking name: Track changes fileName: manage-change-tracking.yaml description: >- @@ -184,7 +193,7 @@ group: Document api_set: WordApi: '1.4' -- id: word-manage-comments +- id: word-document-manage-comments name: Comments fileName: manage-comments.yaml description: >- @@ -195,7 +204,7 @@ group: Document api_set: WordApi: '1.4' -- id: word-manage-footnotes +- id: word-document-manage-footnotes name: Footnotes fileName: manage-footnotes.yaml description: >- diff --git a/playlists/word.yaml b/playlists/word.yaml index a5d1249c7..77299700d 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -173,7 +173,16 @@ group: Tables api_set: WordApi: '1.3' -- id: word-manage-change-tracking +- id: word-document-insert-section-breaks + name: Add a section + fileName: insert-section-breaks.yaml + description: Shows how to insert section breaks in the document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml + group: Document + api_set: + WordApi: '1.1' +- id: word-document-manage-change-tracking name: Track changes fileName: manage-change-tracking.yaml description: >- @@ -184,7 +193,7 @@ group: Document api_set: WordApi: '1.4' -- id: word-manage-comments +- id: word-document-manage-comments name: Comments fileName: manage-comments.yaml description: >- @@ -195,7 +204,7 @@ group: Document api_set: WordApi: '1.4' -- id: word-manage-footnotes +- id: word-document-manage-footnotes name: Footnotes fileName: manage-footnotes.yaml description: >- diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml new file mode 100644 index 000000000..19fd51a2f --- /dev/null +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -0,0 +1,145 @@ +order: 1 +id: word-document-insert-section-breaks +name: Add a section +description: Shows how to insert section breaks in the document. +host: WORD +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)); + + async function addNext() { + // Inserts a section break on the next page. + await Word.run(async (context) => { + let body = context.document.body; + body.insertBreak(Word.BreakType.sectionNext, Word.InsertLocation.end); + + await context.sync(); + + console.log("Inserted section break on next page"); + }); + } + + async function addEven() { + // Inserts a section break on the next even page. + await Word.run(async (context) => { + let body = context.document.body; + body.insertBreak(Word.BreakType.sectionEven, Word.InsertLocation.end); + + await context.sync(); + + console.log("Inserted section break on next even page"); + }); + } + + async function addOdd() { + // Inserts a section break on the next odd page. + await Word.run(async (context) => { + let body = context.document.body; + body.insertBreak(Word.BreakType.sectionOdd, Word.InsertLocation.end); + + await context.sync(); + + console.log("Inserted section break on next odd page"); + }); + } + + async function addContinuous() { + // Inserts a section without an associated page break. + await Word.run(async (context) => { + let body = context.document.body; + body.insertBreak(Word.BreakType.sectionContinuous, Word.InsertLocation.end); + + await context.sync(); + + console.log("Inserted section without an associated page break"); + }); + } + + 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 insert sections in the document. +
+ +
+

Set up

+ +

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

+ + + + +
+ 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 645a228aa..58ad33faa 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -1,5 +1,5 @@ -order: 1 -id: word-manage-change-tracking +order: 2 +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. host: WORD diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index e4880d131..0b8c7643d 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,5 +1,5 @@ -order: 2 -id: word-manage-comments +order: 3 +id: word-document-manage-comments name: Comments description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' host: WORD diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 8fee891e3..599fceeb8 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,5 +1,5 @@ -order: 3 -id: word-manage-footnotes +order: 4 +id: word-document-manage-footnotes name: Footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' host: WORD diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 2228f1c90e4b51c536eaa6e8326a900498a6b7d5..edcb605ec20a962e14623aff1cbbb7e0ea83b51e 100644 GIT binary patch delta 5953 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 J9|Zn`_#ZWJ^IHG_ delta 5857 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 z z%(aH6T4SlY^Q36tuYlsm^lhqt&9t_8L38Z?HGzdC3^7>Yu@d}r|7WZL0Mvm03={ZQ z2{p`Z2%KC}5p4ei00?~{7!dgKg)_WFl9KNKe|7&k*9cFSRK~!C&q(THu)vw6Wd297 zY^5NWZCvmWDJ9G=yl@#lI(Vfd3H^UljR637U;+T7|G5S5gD+cJ9>W8!AT1B%5&;0< ar6S}I{bwNTf4hkP$x|!c0Su<@xyl diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 63a791450..b50fda071 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11942,6 +11942,21 @@ console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); +'Word.Section:class': + - >- + // 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) => { + let body = context.document.body; + body.insertBreak(Word.BreakType.sectionNext, Word.InsertLocation.end); + + await context.sync(); + + console.log("Inserted section break on next page"); + }); 'Word.Section#getHeader:member(1)': - >- // Link to full sample: @@ -11964,6 +11979,21 @@ await context.sync(); }); +'Word.SectionCollection:class': + - >- + // 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) => { + let body = context.document.body; + body.insertBreak(Word.BreakType.sectionEven, Word.InsertLocation.end); + + await context.sync(); + + console.log("Inserted section break on next even page"); + }); 'Word.Style:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 93f3307a1..48b830237 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -18,9 +18,10 @@ "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml", - "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml", - "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.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-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.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-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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", diff --git a/view/word.json b/view/word.json index 93d4f765b..129739b5a 100644 --- a/view/word.json +++ b/view/word.json @@ -18,9 +18,10 @@ "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-tables-table-cell-access": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/table-cell-access.yaml", - "word-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.yaml", - "word-manage-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-comments.yaml", - "word-manage-footnotes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-footnotes.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-manage-change-tracking": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-change-tracking.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-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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", From 198c308697a7486902e34e639afb20155962f69a Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Tue, 14 Jun 2022 10:55:28 -0700 Subject: [PATCH 084/336] move PPT shapes snippet out of preview --- playlists-prod/powerpoint.yaml | 16 ++++++++-------- playlists/powerpoint.yaml | 16 ++++++++-------- .../{preview-apis => shapes}/shapes.yaml | 6 +++--- snippet-extractor-output/snippets.yaml | 6 +++--- view-prod/powerpoint.json | 2 +- view/powerpoint.json | 2 +- 6 files changed, 24 insertions(+), 24 deletions(-) rename samples/powerpoint/{preview-apis => shapes}/shapes.yaml (98%) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 5c4757787..400c1e38e 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -44,14 +44,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-svg.yaml group: Basics 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/preview-apis/shapes.yaml - group: Preview APIs - api_set: PowerPointApi '1.3' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml @@ -60,6 +52,14 @@ 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-add-slides name: Add slides to a presentation fileName: add-slides.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 8354690e4..3510c57b9 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -44,14 +44,6 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-svg.yaml group: Basics 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/preview-apis/shapes.yaml - group: Preview APIs - api_set: PowerPointApi '1.3' - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia fileName: searches-wikipedia-api.yaml @@ -60,6 +52,14 @@ 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-add-slides name: Add slides to a presentation fileName: add-slides.yaml diff --git a/samples/powerpoint/preview-apis/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml similarity index 98% rename from samples/powerpoint/preview-apis/shapes.yaml rename to samples/powerpoint/shapes/shapes.yaml index 58b69af00..2e4b17f2b 100644 --- a/samples/powerpoint/preview-apis/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -2,7 +2,7 @@ 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.3' +api_set: PowerPointApi '1.4' script: content: | $("#create-hexagon").click(() => tryCatch(createHexagon)); @@ -216,8 +216,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/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index b50fda071..ec3febe97 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10766,7 +10766,7 @@ 'PowerPoint.ShapeCollection#addGeometricShape:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; @@ -10784,7 +10784,7 @@ 'PowerPoint.ShapeCollection#addLine:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; @@ -10805,7 +10805,7 @@ 'PowerPoint.ShapeCollection#addTextBox:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/shapes.yaml await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 65de72119..e4fb70123 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -4,8 +4,8 @@ "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-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/preview-apis/shapes.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-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" diff --git a/view/powerpoint.json b/view/powerpoint.json index c609a71d7..e25f23853 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -4,8 +4,8 @@ "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-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/preview-apis/shapes.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-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" From efaa158e5854b5e3025341e6b92e8a85e0880a11 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 16 Jun 2022 09:11:08 -0700 Subject: [PATCH 085/336] [excel] (PivotTable) Refresh sample (#654) * Refresh PivotTable sample * Add comment explaining table * Updating comment in refresh method --- playlists-prod/excel.yaml | 27 ++-- playlists/excel.yaml | 27 ++-- .../pivottable-pivotfilters.yaml | 2 +- .../38-pivottable/pivottable-pivotlayout.yaml | 2 +- .../38-pivottable/pivottable-refresh.yaml | 140 ++++++++++++++++++ .../38-pivottable/pivottable-slicer.yaml | 6 +- .../38-pivottable/pivottable-source-data.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 25648 -> 25625 bytes snippet-extractor-output/snippets.yaml | 24 +++ view-prod/excel.json | 3 +- view/excel.json | 3 +- 11 files changed, 210 insertions(+), 26 deletions(-) create mode 100644 samples/excel/38-pivottable/pivottable-refresh.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index eb7059526..e2495f545 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -535,15 +535,6 @@ group: PivotTable api_set: ExcelAPI: '1.12' -- id: excel-pivottable-slicer - name: Slicer - fileName: pivottable-slicer.yaml - description: Adds a slicer to a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml - group: PivotTable - api_set: - ExcelApi: '1.10' - id: excel-pivottables-pivotfilters name: PivotFilters fileName: pivottable-pivotfilters.yaml @@ -571,6 +562,24 @@ group: PivotTable api_set: ExcelApi: '1.15' +- id: excel-pivottable-refresh + name: Refresh + fileName: pivottable-refresh.yaml + description: Refreshes a PivotTable based on table row additions. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml + group: PivotTable + api_set: + ExcelApi: '1.8' +- id: excel-pivottable-slicer + name: Slicer + fileName: pivottable-slicer.yaml + description: Adds a slicer to a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml + group: PivotTable + api_set: + ExcelApi: '1.10' - id: excel-range-auto-fill name: Auto fill fileName: range-auto-fill.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 57796f4e1..2890be82f 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -535,15 +535,6 @@ group: PivotTable api_set: ExcelAPI: '1.12' -- id: excel-pivottable-slicer - name: Slicer - fileName: pivottable-slicer.yaml - description: Adds a slicer to a PivotTable. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml - group: PivotTable - api_set: - ExcelApi: '1.10' - id: excel-pivottables-pivotfilters name: PivotFilters fileName: pivottable-pivotfilters.yaml @@ -571,6 +562,24 @@ group: PivotTable api_set: ExcelApi: '1.15' +- id: excel-pivottable-refresh + name: Refresh + fileName: pivottable-refresh.yaml + description: Refreshes a PivotTable based on table row additions. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-refresh.yaml + group: PivotTable + api_set: + ExcelApi: '1.8' +- id: excel-pivottable-slicer + name: Slicer + fileName: pivottable-slicer.yaml + description: Adds a slicer to a PivotTable. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml + group: PivotTable + api_set: + ExcelApi: '1.10' - id: excel-range-auto-fill name: Auto fill fileName: range-auto-fill.yaml diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index d824dc378..d07c74f5e 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 5 id: excel-pivottables-pivotfilters name: PivotFilters description: Applies PivotFilters to a PivotTable. diff --git a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml index 34a8bc871..acbd8c3f0 100644 --- a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml @@ -1,4 +1,4 @@ -order: 7 +order: 6 id: excel-pivottable-pivotlayout name: PivotLayout description: Sets PivotTable layout settings through the PivotLayout. diff --git a/samples/excel/38-pivottable/pivottable-refresh.yaml b/samples/excel/38-pivottable/pivottable-refresh.yaml new file mode 100644 index 000000000..b42a993ca --- /dev/null +++ b/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -0,0 +1,140 @@ +order: 8 +id: excel-pivottable-refresh +name: Refresh +description: Refreshes a PivotTable based on table row additions. +host: EXCEL +api_set: + ExcelApi: '1.8' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#refresh-pivottable").click(() => tryCatch(refreshPivotTable)); + $("#add-table-row").click(() => tryCatch(addTableRow)); + + async function refreshPivotTable() { + await Excel.run(async (context) => { + // This method refreshes the "Farm Sales" PivotTable, + // which updates the PivotTable with changes made to the source table. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + pivotTable.refresh(); + await context.sync(); + }); + } + + async function addTableRow() { + await Excel.run(async (context) => { + // This method adds a row to the PivotTable's source table. + const dataTable = context.workbook.tables.getItem("DataTable"); + dataTable.rows.add(null, [["G Farms", "Mango", "Organic", 200, 1000]]); + await context.sync(); + }); + } + + async function setup() { + await Excel.run(async (context) => { + context.workbook.worksheets.getItemOrNullObject("Sample").delete(); + const sheet = context.workbook.worksheets.add("Sample"); + + const data = [ + ["Farm", "Type", "Classification", "Crates Sold at Farm", "Crates Sold Wholesale"], + ["A Farms", "Lime", "Organic", 300, 2000], + ["A Farms", "Lemon", "Organic", 250, 1800], + ["A Farms", "Orange", "Organic", 200, 2200], + ["B Farms", "Lime", "Conventional", 80, 1000], + ["B Farms", "Lemon", "Conventional", 75, 1230], + ["B Farms", "Orange", "Conventional", 25, 800], + ["B Farms", "Orange", "Organic", 20, 500], + ["B Farms", "Lemon", "Organic", 10, 770], + ["B Farms", "Kiwi", "Conventional", 30, 300], + ["B Farms", "Lime", "Organic", 50, 400], + ["C Farms", "Apple", "Organic", 275, 220], + ["C Farms", "Kiwi", "Organic", 200, 120], + ["D Farms", "Apple", "Conventional", 100, 3000], + ["D Farms", "Apple", "Organic", 80, 2800], + ["E Farms", "Lime", "Conventional", 160, 2700], + ["E Farms", "Orange", "Conventional", 180, 2000], + ["E Farms", "Apple", "Conventional", 245, 2200], + ["E Farms", "Kiwi", "Conventional", 200, 1500], + ["F Farms", "Kiwi", "Organic", 100, 150], + ["F Farms", "Lemon", "Conventional", 150, 270] + ]; + + const range = sheet.getRange("A1:E21"); + range.values = data; + const table = sheet.tables.add(range, true); + table.name = "DataTable"; + range.format.autofitColumns(); + + const rangeToPlacePivot = sheet.getRange("G1"); + + // Make the source of the PivotTable a Table so added rows are picked up by the refresh operation. + const pivotTable = sheet.pivotTables.add("Farm Sales", table, rangeToPlacePivot); + + pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Farm")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold at Farm")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); + + 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 refresh a PivotTable.

+
+ +
+

Setup

+ +
+
+

Try it out

+

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

+ +

+ +
+ 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/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 36ca4db7b..96c967688 100644 --- a/samples/excel/38-pivottable/pivottable-slicer.yaml +++ b/samples/excel/38-pivottable/pivottable-slicer.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 9 id: excel-pivottable-slicer name: Slicer description: Adds a slicer to a PivotTable. @@ -153,7 +153,7 @@ template:

@@ -178,7 +178,7 @@ template:

Clean up

diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index 1e8f7c06b..32ea1879a 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 7 id: excel-pivottable-data-source name: PivotTable data source description: Gets information about the data source of a PivotTable. diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 63cec784c1bb16653ade7e4e37c171bd689d2466..93a7e502bdcb11f19f3a705a0172d9334b28139c 100644 GIT binary patch delta 16994 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 delta 16903 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 aO)--TlSM^X*+8N~K=_!2fx$c;!~+1EuAX=R diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ec3febe97..30071fa6d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3519,6 +3519,18 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); +'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 + + await Excel.run(async (context) => { + // This method refreshes the "Farm Sales" PivotTable, + // which updates the PivotTable with changes made to the source table. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + pivotTable.refresh(); + await context.sync(); + }); 'Excel.PivotTableCollection#add:member(1)': - >- // Link to full sample: @@ -3531,6 +3543,18 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + // This method refreshes the "Farm Sales" PivotTable, + // which updates the PivotTable with changes made to the source table. + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + pivotTable.refresh(); + await context.sync(); + }); 'Excel.PresetCriteriaConditionalFormat#rule:member': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index 487fbea0b..1122b745b 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -56,10 +56,11 @@ "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", - "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-pivotlayout.yaml", "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml", + "excel-pivottable-refresh": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-refresh.yaml", + "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml", diff --git a/view/excel.json b/view/excel.json index 03829975f..99dce1f70 100644 --- a/view/excel.json +++ b/view/excel.json @@ -56,10 +56,11 @@ "excel-pivottable-create-and-modify": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-create-and-modify.yaml", "excel-pivottable-filters-and-summaries": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml", "excel-pivottables-get-pivottables": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-get-pivottables.yaml", - "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-pivottables-pivotfilters": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotfilters.yaml", "excel-pivottable-pivotlayout": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-pivotlayout.yaml", "excel-pivottable-data-source": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-source-data.yaml", + "excel-pivottable-refresh": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-refresh.yaml", + "excel-pivottable-slicer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/38-pivottable/pivottable-slicer.yaml", "excel-range-auto-fill": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-auto-fill.yaml", "excel-range-copyfrom": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-copyfrom.yaml", "excel-range-areas": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/42-range/range-areas.yaml", From 84cd0cadf8c1fdbee55ab84a2f6dfe40fea53eee Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 17 Jun 2022 10:26:46 -0700 Subject: [PATCH 086/336] [Outlook] (makeEwsRequestAsync) Replace sample with recent snippet (#656) --- snippet-extractor-metadata/outlook.xlsx | Bin 20943 -> 20585 bytes snippet-extractor-output/snippets.yaml | 41 +++++++++++++----------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index ef75db06a5d0f9581f12a3b0b25eea2c96aa7e1f..d6c4264bece92aaa7a698ad75b5a7b4785789067 100644 GIT binary patch delta 10781 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 delta 11156 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 30071fa6d..72e647421 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9631,30 +9631,35 @@ '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/make-ews-request-async.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml - var ewsId = Office.context.mailbox.item.itemId; + const ewsId = Office.context.mailbox.item.itemId; - var request = '' + - ' ' + - ' ' + - ' ' + - ' ' + - ' IdOnly' + - ' ' + - ' ' + - ' ' + - ' ' + - ' ' + - ' ' + - ''; + xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> + + + + + AllProperties + + + + + + + `; + + Office.context.mailbox.makeEwsRequestAsync(request, (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; + } - Office.context.mailbox.makeEwsRequestAsync(request, function (result) { - console.log(result); + console.log(getUID(result.value)); }); - >- // Link to full sample: From 9f199b887817b6c647b331c5f0de42f097dc6857 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 17 Jun 2022 15:01:27 -0700 Subject: [PATCH 087/336] [Word] (TableCell) Map existing sample (#658) --- snippet-extractor-metadata/word.xlsx | Bin 14760 -> 14814 bytes snippet-extractor-output/snippets.yaml | 12 ++++++++++++ 2 files changed, 12 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index edcb605ec20a962e14623aff1cbbb7e0ea83b51e..9eca941b62de08b4c5cac6ca89b3de2f098a2121 100644 GIT binary patch delta 6887 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 delta 6818 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 72e647421..1a86148f6 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -12051,3 +12051,15 @@ await context.sync(); console.log("First cell text is " + firstCell.text); }); +'Word.TableCell: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) => { + let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; + firstCell.load("text"); + + await context.sync(); + console.log("First cell text is " + firstCell.text); + }); From 0eda1737cc8aca64ab664a657f098a61a14ee949 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 17 Jun 2022 16:03:37 -0700 Subject: [PATCH 088/336] [Word] (paragraph) Show how to use other HeaderFooterType options (#657) * [Word] (paragraph) Show how to use other HeaderFooterType options * Updates based on feedback * Add missing word * Updates per feedback --- playlists-prod/word.yaml | 4 +- playlists/word.yaml | 4 +- .../insert-header-and-footer.yaml | 141 ++++++++++++++++-- snippet-extractor-metadata/word.xlsx | Bin 14814 -> 14852 bytes snippet-extractor-output/snippets.yaml | 25 +++- 5 files changed, 154 insertions(+), 20 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 76b22c9dc..c508a8807 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -91,9 +91,9 @@ api_set: WordApi: '1.1' - id: word-paragraph-insert-header-and-footer - name: Insert a header and footer + name: Insert headers and footers fileName: insert-header-and-footer.yaml - description: Inserts a header and a footer in the document. + description: Inserts headers and footers in the document. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml group: Paragraph diff --git a/playlists/word.yaml b/playlists/word.yaml index 77299700d..1bbe8a923 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -91,9 +91,9 @@ api_set: WordApi: '1.1' - id: word-paragraph-insert-header-and-footer - name: Insert a header and footer + name: Insert headers and footers fileName: insert-header-and-footer.yaml - description: Inserts a header and a footer in the document. + description: Inserts headers and footers in the document. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-header-and-footer.yaml group: Paragraph diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index c4d84a1ec..0b83646ff 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -1,20 +1,27 @@ order: 5 id: word-paragraph-insert-header-and-footer -name: Insert a header and footer -description: Inserts a header and a footer in the document. +name: Insert headers and footers +description: Inserts headers and footers in the document. author: OfficeDev host: WORD api_set: WordApi: '1.1' script: - content: |- + 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)); async function addHeader() { await Word.run(async (context) => { - context.document.sections.getFirst().getHeader("Primary") - .insertParagraph("This is a header", "End"); + context.document.sections + .getFirst() + .getHeader(Word.HeaderFooterType.primary) + .insertParagraph("This is a primary header.", "End"); await context.sync(); }); @@ -22,36 +29,146 @@ script: async function addFooter() { await Word.run(async (context) => { - context.document.sections.getFirst().getFooter("Primary") - .insertParagraph("This is a footer", "End"); + context.document.sections + .getFirst() + .getFooter("Primary") + .insertParagraph("This is a primary footer.", "End"); + + await context.sync(); + }); + } + + async function addFirstPageHeader() { + await Word.run(async (context) => { + context.document.sections + .getFirst() + .getHeader("FirstPage") + .insertParagraph("This is a first-page header.", "End"); + + await context.sync(); + }); + } + + async function addFirstPageFooter() { + await Word.run(async (context) => { + context.document.sections + .getFirst() + .getFooter(Word.HeaderFooterType.firstPage) + .insertParagraph("This is a first-page footer.", "End"); + + await context.sync(); + }); + } + + async function addEvenPagesHeader() { + await Word.run(async (context) => { + context.document.sections + .getFirst() + .getHeader(Word.HeaderFooterType.evenPages) + .insertParagraph("This is an even-pages header.", "End"); await context.sync(); }); } + async function addEvenPagesFooter() { + await Word.run(async (context) => { + context.document.sections + .getFirst() + .getFooter("EvenPages") + .insertParagraph("This is an even-pages footer.", "End"); + + await context.sync(); + }); + } + + async function setup() { + await Word.run(async (context) => { + // Set up text in the document body. + const body = context.document.body; + body.clear(); + body.insertParagraph( + "HeaderFooterType.firstPage applies the header or footer to the first page of the current section. HeaderFooterType.evenPages applies the header or footer to the even pages of the current section. By default, HeaderFooterType.primary applies the header or footer to all pages in the current section. However, if either or both options for FirstPage and EvenPages are set, Primary excludes those pages.", + "Start" + ); + body.insertBreak(Word.BreakType.page, Word.InsertLocation.end); + 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.", + "End" + ); + body.insertBreak(Word.BreakType.page, Word.InsertLocation.end); + 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 Online cover page, header, and sidebar. Click Insert and then choose the Online elements you want from the different Online galleries.", + "End" + ); + + // Clear any headers and footers. + const section = context.document.sections.getFirst(); + + section.getHeader("Primary").clear(); + section.getHeader("FirstPage").clear(); + section.getHeader("EvenPages").clear(); + + section.getFooter("Primary").clear(); + section.getFooter("FirstPage").clear(); + section.getFooter("EvenPages").clear(); + }); + } + /** 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); + // 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 inserts a header and footer in the document. + This sample inserts headers and footers in the document. +
+ +
+

Set up

+

1. Set up sample text. + +

2. Open the Header & Footer ribbon (refer to Edit your + existing headers and footers for details).

Try it out

+

Apply to all pages

+ +
To see the "Primary" header/footer in the document, turn off the Different First Page and + Different Odd & Even Pages options in the + Header & Footer ribbon.
+

Apply to the first page

+ + + +
To see the "FirstPage" header/footer in the document, turn on the Different First Page option in the Header & Footer ribbon then scroll to the first page.
+

Apply to all even pages

+ + +
To see the "EvenPages" header/footer in the document, turn on the Different Odd & Even Pages option in the Header & Footer ribbon then scroll to an even-numbered page.
language: html style: diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 9eca941b62de08b4c5cac6ca89b3de2f098a2121..2f9ed132cdb1f055df7af1288cc15598435f2c48 100644 GIT binary patch delta 6207 zcmY*d2QVDox7G=(MK3{gcCk9qS$6f#>b*s@MRcpT=!>XPqxVkK=plLw(IZ;45G};Z z@BiMs-+O1y+_^L7n|sfk`R1H^zje^83N`3)!|Tzce&TMn2cIKTN3{WdQw zmJmH%?^doEwx(BO_8Z=@i3JQv;eVpN@EGKvGwbbF(Wy8%EPcP`G-X+LtWvja+ zg`9^u6>NMfa>Z#Dc)&9qn{TZ-*2@rf75RA&tEhY74F=c8#jYm z+HvsPUg07mn11}wuLGXNK$G+=vOwpZRAS>;TOump7GvR%dBWhRa>Kgk%U z8qNAytk-C;SJyzhPfd#VW8yN;I~@CiHn35YcIxD4O60;~z%qb;E7K&1@21CZJkH2? zExcTyBPk`pY#%?`N?E?0;P?6!lR%z=0h9szocG``G8!;H|%E8N)@N&6DpH?r_c?l-3uVqC#8BUpWcopR?F+rNqWAUmLcyrwTI*XyXT5YN@blGAyOf zf`I&|3evTqzj9rxagKsX7JK_lJCI(DWPU0Z(RnlFt66-;bDXrz+x^z-*&1aY&LVVC4+n^b z++Rw_1KV7JE~~c`Gg>8HwCv+@u<)^E(P>Te0M8bV47({UjJ6Otc@ z7fr2t%^O~;V!J7m@=;wt1S}zxPSUYfB6Qdm(A_RWf5|!4x4ck+7w7< z+I-%AqDj&$-@VrmQk#_6^hfNk@lo(}3)XV%@n&oWRfN`kkwHU4dwl%Q zl4f$8xFZ4xOjlqipt}W*S^0zxkA;I;2`-mf+NDfa+v<461;iDGN07$|h?Beuy>`#u zl#GmY@YnU=u5M}M<551}h6T~V+3v+@n_K=IGU%At0!2y8fE?eue3Y?Bn$nc9$j@JY zbIk3cysG3Rk>7mIo{-SG_P(a3wan?j`$66EfvmN*_c$a(sFbA|@k+pn>9wwnfBm{t z(#r=I%LhRb=!AonER)U-epWG_%#BOKSY$p<%oByErf1o_vM$3XS|&^gmxl~8ak&u+ z0o?&O%>e%z19GyUNaQ%pVqIA9b#ykm+)LnKQR}kaJQMO1;MB$l)273ixBo#Tj2Sj> z5ToeQAXPG){FNVU8NFFfh2tKZvclWGnzKSGD;*7DEQ;uo43RBSMK!A zK-XZGwN$m5%ct;zh+l@>33~(}JzCu)6C-23)hFePS;)kc717X#^vT-FU-7*at=4BP z3$elY3r_m+CLpw?y3S=*5mjl3n_uPI@LHGTZ$1R`VjL=Q^ZPU)N~n%}PDAi+#p@;M zI$YTVPumh$(7XQCm89ebL%W`WkD1kr=;cAF!_(iJcQYn0VO$zyH>3o18p%gHLMtVO zO8kV!^T<`Kl*SzPGZxxUxsFMfB80+mPL5?J82gS8l~>t)NsgSJ@-xNI3;$n^Zp4s7 z`_vZDIfK@BtdURZN#B1R&Lp0wrRa!XzGhp`QRl71Tc;PHrbQf1;HqXk5Cm>risCNZ~;dcE$U~k!V>;>WD7Nr6b z^VHLNHr_Uk#>3;4OIAF*MC8L`73^MS1`J%V%BQ03s0%f?Ef=RMn}J=^7w)*8eJHmF ziy1=eGNRebrBu_d1-~O!C96}@{=$n)uTG+Z5_vI%7c{{#S&TsF&(&hpYwguORv7EiM)KTD>_FMd- z{a!yxs^`*}>2!8gDGh>iN@~LvQU>#2NqoF}dwe5fB_#+B_e^@l^7DDPaK-%g0bKUb z2O28)H&xyp{0*J56*TY3la~rXz9)@z6YbjXjN_K^S2B$TVzST=b3Gdp@KONC^#q!u z$OwcT=$$Pu?SPnlh8v$fDgP`YNvbfolQMZy>6M&*vi>}XSS?jp6+tG*3^P_p1}hs- z`m)f!VWE*yNCNW{eB-PUDS`^z>=xv}ye|2y3+u}6;87L6I=xLHwnu;2GQZXbn3QTy z*iQy5{#O5rY`pKLjAspPTSYclPviqo^ShcSVlSXAf+L zwc26t$fqQl0ZZo1%!egAB4gNe_}Im5w1V*f#i9;ao3s}BIl;0@>=5!wypLhZ?aZHWY?HM zQf<%Hi3G{9uax2#$Ks&;RnhN$L6t~pW}5(o01&me>*jH(^-CPu;+XVMg%kD$BrTwfV;)NW zpP1Z?jSDcCJ}e6JE^4OFH(Cvna@kt|0|0t<3}Uhhql)@RLbhcYY}bk69Z`R%nw9%U zD`JuB+z>VYD3#~_!zPKkQ@>+W#w_#lmuUo;?qhwhv#<#H>MGDmtPg1 z#{ra!Di8(;w)*K)i0Z;LXuh;l*BJo^Af}$&1y)TQ!P`ys4i_wGQVn9wJ4D8en+oZGS-m8 zS)lNQvw<*5@14XQnO z&5e~V$NTtX2!p>H@*kx_ZSrDPC4^N_!F)R0>=`?=QqCmeTi}9w+Su`r?g5bGC}P%sWE+(`8&9b$%h6 zYAMmOuV84#Y058;mYsFQZW}+7*hcY ze_*)fixO-Jm!S;(0yW(FnPh$5`r7sJ(j^ie9K2&hu#iCdRK`wo_mL}O##kXQ;ch#T zK(SbSHuXq>mK643Os1DeGjMmxVU^nPQ%L)2I%GlAOH~XO_=8=$w0(9|cE8Uv0rFIC z^_l0#FFJxBYM8>#U4TT@1+lN&G{I-x6rCB+@$WtFdc#*5m#XaI=jNS*Ge*YKg){Ul z@pl4Gm;3HWu#~ZA9LqDf)U-r<)-yKco(#?U7k#;Yvj$Xe4JNrl6169MWHsi_Q}8&E ze_6Z~ml`woF(e_oX7S2d@5!U89e~yS>27>=8tYdj8=oS&5OJE_`%jc-Z?}nFn=y5e zR)DGe;tMI3#ZICuVWO|jS7L`wi(8hZmPxh#c*6Cl0`AK+e)pYv==`3GNn_hsnLkav zTc|hwCOB!JGfgQSi!9JssW>i=vTN-UfWLRqpC6j5#rqS<|CX+y&eJGJ1C)|k|gX&O&FYdI+pWE_H6s8N=dGx;c zu^?h7Uhb>OwoovzsNlJYl(MVAx+gI}N+Yo|!{jwPO-xz5^+Qr^fZ_UV z^g3kkF8Ft2{kMS%t1tw+Ps560IbS4G|0NB}S2NbH166#tPyYF9J;~w;Fw?+BLvu%o zGXn{73!a3@8(5C>Gxwp~n3<6W0X)zt%j)Sv#QoLhAz!S@>GxV6#?LK|Os+g68xyNi zRckg8UAPi|gns{eThZbg(fG+c5xAEv!$D@Er{(!uNwgrjaiR1((PQ@7pa_ny6A;aC zeC)%UH^iuH0$~PfV@`f~_|pVV7KRxyY?%BR#z+`P*b#_fRLvWNyc`05TtJZsl&rr?au ziejyoH)?iQrw*lk@NmyTk^r@Bw*3bPKx~K9wXH;IPwly0b4#bydlM)gyp`{d>j@7~ z7q&u$D*a?uruT0v_siCj?EOwDeNS2r)E!*pNo(8ICa)DvTjYb^RTKj!B(F@XtKa;2 z#@#iXajS&VOm5`ba0kXwxa+c}|75l`a@U>JQ~hLmgwSjrHT_+QMEn_X%&MrdDTS+Q z-?nDAEgrle%$XVv{)~!yu_(TzGkZQH(zB4wDXFJM))}Ac@k22ul_KwAYbjvrg?7{& z%G;a`)NoOzu%pxKOuw-DKy&me^!un6=$4wTEcCibrPPe=HASo5ZckC2vb_t7Vi6EB zbe@1U{*f3ct1?VrLNC$LvC|Q&-Fmg>na1uo@3EQW7cQj(_kkrmqMZBF!rn}`vvqy7 zd!NCxSj~CIpYH`TT)-5zcyG2q|R*}PVUrJ*}1BaWbRH`Wy!MYM5h06Dy*y``XQj)KOFa6*0ue+ zI+-8Q(l@;E>Bc+?Uf2V&0iFUQmCT!CPO^z!SaH23XM&npU1g)Kh08(P`Rm zTj}JAqf;bqnF0=opw(dN?4j@4PJ$K2Q2}H>)PLdzx|xR%H}bC>)_nMBnX>L`$71dX z5fj+{kgIe-#eJ(;?KS+f)Aq>WnE$i2sMMbcgbG6EX&)Xd8kG<>HV^42vMMdPtIsd2 z(ZZ_WW;5r5E`mO?$!c0f;_CkF+~`Zpu>feM=#ymhT;lar(;tte1IBf0H}}0flHs?@ z!5_{q#Z1jE^5$B8LiwT9gL&JDs( zI0@@qZGc!@F`OH{$0I001WPA_gH54;cl)VjCV%n{Ifm)3_(!fv8c5Ug=DpX50icAY zP!>dzBZgzZAxt>Zj13< z(9yXMR|E|J8UdpuqF zuGu!{2F(aj+duCv=?qkDf_TfCpZT~{uANc6cVf&-DL#8!W-)tEH&@tk2N^vS{fF*N z)*u#i>}$qla*d`q9(Hu3h3Wv9d}sr^S79t5huss2=Yq=}fM9}a2fi6wGjN$rwSE2j zs`S`Eg1TpS-Sg*o$6MC%aPDwMaBI0&9E`jet-0K`u#LdNz%&ElL!LJYHa2ki?73Fyf4=l$$<8);?oi_ifr{sa$Q*9a&rrHQ3$Q(Wg z0NqUyBOU~RqtF-)7#EIhx2PR%GKRtv{N|=i2-c(DGitj!^Zm3GU5XR8nKcHkd!#>Rcd^I$PLG_ z8k66ry{Evw4AfkiC`d5fV$>GzY zmPAPC{#7Q?(5U}PPXC%A3PV&8-2w#@WvBc18H$ER_%Gz|ZXFdX%0&OagO?l)?XUkI zlVL_lGgG2gMY+*?Q8;2+7+*M1)0|u&Emd?3p1)WeG`zp)=V!h`~RQt zk_%k delta 6176 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 BZi)Z^ diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 1a86148f6..04fb38315 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11548,6 +11548,19 @@ } } }); +'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 + + await Word.run(async (context) => { + context.document.sections + .getFirst() + .getHeader(Word.HeaderFooterType.primary) + .insertParagraph("This is a primary header.", "End"); + + await context.sync(); + }); 'Word.InlinePicture#getBase64ImageSrc:member(1)': - >- // Link to full sample: @@ -11992,8 +12005,10 @@ 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().getHeader("Primary") - .insertParagraph("This is a header", "End"); + context.document.sections + .getFirst() + .getHeader(Word.HeaderFooterType.primary) + .insertParagraph("This is a primary header.", "End"); await context.sync(); }); @@ -12003,8 +12018,10 @@ 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().getFooter("Primary") - .insertParagraph("This is a footer", "End"); + context.document.sections + .getFirst() + .getFooter("Primary") + .insertParagraph("This is a primary footer.", "End"); await context.sync(); }); From 4e3a20adf31e6b191635f1b621cebc2a64321261 Mon Sep 17 00:00:00 2001 From: "msftbot[bot]" <48340428+msftbot[bot]@users.noreply.github.com> Date: Thu, 30 Jun 2022 09:50:22 -0700 Subject: [PATCH 089/336] Add `.github/fabricbot.json` (#660) Co-authored-by: msftbot[bot] <48340428+msftbot[bot]@users.noreply.github.com> --- .github/fabricbot.json | 903 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 903 insertions(+) create mode 100644 .github/fabricbot.json diff --git a/.github/fabricbot.json b/.github/fabricbot.json new file mode 100644 index 000000000..f00d004c0 --- /dev/null +++ b/.github/fabricbot.json @@ -0,0 +1,903 @@ +{ + "version": "1.0", + "tasks": [ + { + "taskType": "trigger", + "capabilityId": "IssueResponder", + "subCapability": "IssuesOnlyResponder", + "version": "1.0", + "config": { + "taskName": "Add needs triage label to new issues", + "conditions": { + "operator": "and", + "operands": [ + { + "name": "isAction", + "parameters": { + "action": "opened" + } + }, + { + "operator": "not", + "operands": [ + { + "name": "isAssignedToSomeone", + "parameters": {} + } + ] + } + ] + }, + "actions": [ + { + "name": "addLabel", + "parameters": { + "label": "Needs: triage :mag:" + } + } + ], + "eventType": "issue", + "eventNames": [ + "issues", + "project_card" + ] + }, + "id": "9FS-CM3HK" + }, + { + "taskType": "scheduled", + "capabilityId": "ScheduledSearch", + "subCapability": "ScheduledSearch", + "version": "1.1", + "config": { + "taskName": "Add no recent activity label to issues", + "frequency": [ + { + "weekDay": 0, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 1, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 2, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 3, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 4, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 5, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 6, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + } + ], + "searchTerms": [ + { + "name": "isIssue", + "parameters": {} + }, + { + "name": "isOpen", + "parameters": {} + }, + { + "name": "hasLabel", + "parameters": { + "label": "Needs: author feedback" + } + }, + { + "name": "noActivitySince", + "parameters": { + "days": 4 + } + }, + { + "name": "noLabel", + "parameters": { + "label": "Status: no recent activity" + } + } + ], + "actions": [ + { + "name": "addLabel", + "parameters": { + "label": "Status: no recent activity" + } + }, + { + "name": "addReply", + "parameters": { + "comment": "This issue has been automatically marked as stale because it is marked as needing author feedback but has not had any activity for **4 days**. It will be closed if no further activity occurs **within 3 days of this comment**. Thank you for your interest in Office Add-ins!" + } + } + ] + }, + "id": "MdBActeXZZ" + }, + { + "taskType": "scheduled", + "capabilityId": "ScheduledSearch", + "subCapability": "ScheduledSearch", + "version": "1.1", + "config": { + "taskName": "Close stale issues", + "frequency": [ + { + "weekDay": 0, + "hours": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 1, + "hours": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 2, + "hours": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 3, + "hours": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 4, + "hours": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 5, + "hours": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 6, + "hours": [ + 0, + 3, + 6, + 9, + 12, + 15, + 18, + 21 + ], + "timezoneOffset": -8 + } + ], + "searchTerms": [ + { + "name": "isIssue", + "parameters": {} + }, + { + "name": "isOpen", + "parameters": {} + }, + { + "name": "hasLabel", + "parameters": { + "label": "Needs: author feedback" + } + }, + { + "name": "hasLabel", + "parameters": { + "label": "Status: no recent activity" + } + }, + { + "name": "noActivitySince", + "parameters": { + "days": 3 + } + } + ], + "actions": [ + { + "name": "addReply", + "parameters": { + "comment": "This issue has been closed due to inactivity. Please comment if you still need assistance and we'll re-open the issue." + } + }, + { + "name": "closeIssue", + "parameters": {} + } + ] + }, + "id": "X16DiT_Ysm" + }, + { + "taskType": "trigger", + "capabilityId": "IssueResponder", + "subCapability": "IssuesOnlyResponder", + "version": "1.0", + "config": { + "taskName": "Remove no recent activity label when there is activity in an issue", + "conditions": { + "operator": "and", + "operands": [ + { + "operator": "not", + "operands": [ + { + "name": "isAction", + "parameters": { + "action": "closed" + } + } + ] + }, + { + "name": "hasLabel", + "parameters": { + "label": "Status: no recent activity" + } + } + ] + }, + "actions": [ + { + "name": "removeLabel", + "parameters": { + "label": "Status: no recent activity" + } + } + ], + "eventType": "issue", + "eventNames": [ + "issues", + "project_card" + ] + }, + "id": "HeNTYmKhkI" + }, + { + "taskType": "trigger", + "capabilityId": "IssueResponder", + "subCapability": "IssueCommentResponder", + "version": "1.0", + "config": { + "taskName": "Remove no recent activity label when an issue is commented on", + "conditions": { + "operator": "and", + "operands": [ + { + "name": "hasLabel", + "parameters": { + "label": "Status: no recent activity" + } + } + ] + }, + "actions": [ + { + "name": "removeLabel", + "parameters": { + "label": "Status: no recent activity" + } + } + ], + "eventType": "issue", + "eventNames": [ + "issue_comment" + ] + }, + "id": "7gwnCtQNuy" + }, + { + "taskType": "trigger", + "capabilityId": "IssueResponder", + "subCapability": "IssueCommentResponder", + "version": "1.0", + "config": { + "taskName": "Replace needs author feedback label with needs attention label when the author comments on an issue", + "conditions": { + "operator": "and", + "operands": [ + { + "name": "isAction", + "parameters": { + "action": "created" + } + }, + { + "name": "isActivitySender", + "parameters": { + "user": { + "type": "author" + } + } + }, + { + "name": "hasLabel", + "parameters": { + "label": "Needs: author feedback" + } + } + ] + }, + "actions": [ + { + "name": "addLabel", + "parameters": { + "label": "Needs: attention :wave:" + } + }, + { + "name": "removeLabel", + "parameters": { + "label": "Needs: author feedback" + } + } + ], + "eventType": "issue", + "eventNames": [ + "issue_comment" + ] + }, + "id": "Nb7fv4SsSn" + }, + { + "taskType": "trigger", + "capabilityId": "InPrLabel", + "subCapability": "InPrLabel", + "version": "1.0", + "config": { + "taskName": "Adds In-PR Label", + "fixedLabelEnabled": true, + "label_inPr": "Status: in PR", + "label_fixed": "Status: fixed" + }, + "id": "pBX7ROvA5M" + }, + { + "taskType": "scheduled", + "capabilityId": "ScheduledSearch", + "subCapability": "ScheduledSearch", + "version": "1.1", + "config": { + "frequency": [ + { + "weekDay": 0, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 1, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 2, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 3, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 4, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 5, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 6, + "hours": [ + 1, + 4, + 7, + 10, + 13, + 16, + 19, + 22 + ], + "timezoneOffset": -8 + } + ], + "searchTerms": [ + { + "name": "isIssue", + "parameters": {} + }, + { + "name": "isOpen", + "parameters": {} + }, + { + "name": "hasLabel", + "parameters": { + "label": "Type: programming question" + } + } + ], + "taskName": "Redirect programming questions to Stack Overflow", + "actions": [ + { + "name": "addReply", + "parameters": { + "comment": "Thanks for your interest in Office Add-ins development! Feedback here is intended for reporting problems with Script Lab *snippets*. Can you please post your question to Stack Overflow with the [office-js](https://stackoverflow.com/questions/tagged/office-js) tag? By posting how-to questions like this to Stack Overflow, you'll not only be able to reach a broader audience of folks who have expertise in the area, but will also enable others to benefit from any answers that are provided there. Thanks!" + } + }, + { + "name": "closeIssue", + "parameters": {} + } + ] + }, + "id": "Yq4ZDzWMNg" + }, + { + "taskType": "scheduled", + "capabilityId": "ScheduledSearch", + "subCapability": "ScheduledSearch", + "version": "1.1", + "config": { + "frequency": [ + { + "weekDay": 0, + "hours": [ + 2, + 5, + 8, + 11, + 14, + 17, + 20, + 23 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 1, + "hours": [ + 2, + 5, + 8, + 11, + 14, + 17, + 20, + 23 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 2, + "hours": [ + 2, + 5, + 8, + 11, + 14, + 17, + 20, + 23 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 3, + "hours": [ + 2, + 5, + 8, + 11, + 14, + 17, + 20, + 23 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 4, + "hours": [ + 2, + 5, + 8, + 11, + 14, + 17, + 20, + 23 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 5, + "hours": [ + 2, + 5, + 8, + 11, + 14, + 17, + 20, + 23 + ], + "timezoneOffset": -8 + }, + { + "weekDay": 6, + "hours": [ + 2, + 5, + 8, + 11, + 14, + 17, + 20, + 23 + ], + "timezoneOffset": -8 + } + ], + "searchTerms": [ + { + "name": "isIssue", + "parameters": {} + }, + { + "name": "isOpen", + "parameters": {} + }, + { + "name": "hasLabel", + "parameters": { + "label": "Type: product feature request" + } + } + ], + "taskName": "Redirect product feature requests to Tech Community", + "actions": [ + { + "name": "addReply", + "parameters": { + "comment": "Thanks for your interest in Office Add-ins development! Feedback here is intended for reporting problems with Script Lab *snippets*. Can you please post this feature request to the [Microsoft 365 Developer Platform Tech Community](https://techcommunity.microsoft.com/t5/microsoft-365-developer-platform/idb-p/Microsoft365DeveloperPlatform)? Feature Requests submitted to Tech Community are regularly reviewed by the product teams as they plan future releases. Thanks!" + } + }, + { + "name": "closeIssue", + "parameters": {} + } + ] + }, + "id": "asPoKJtrPC" + }, + { + "taskType": "trigger", + "capabilityId": "IssueResponder", + "subCapability": "IssuesOnlyResponder", + "version": "1.0", + "id": "0dk0asB6B", + "config": { + "conditions": { + "operator": "and", + "operands": [ + { + "name": "labelAdded", + "parameters": { + "label": "Status: in PR" + } + }, + { + "name": "hasLabel", + "parameters": { + "label": "Status: under investigation" + } + } + ] + }, + "eventType": "issue", + "eventNames": [ + "issues", + "project_card" + ], + "taskName": "Remove Status: under investigation label from issue when Status: in PR label is added", + "actions": [ + { + "name": "removeLabel", + "parameters": { + "label": "Status: under investigation" + } + } + ], + "dangerZone": { + "respondToBotActions": true, + "acceptRespondToBotActions": true + } + } + }, + { + "taskType": "trigger", + "capabilityId": "IssueResponder", + "subCapability": "IssuesOnlyResponder", + "version": "1.0", + "id": "Yi7lthpb2", + "config": { + "conditions": { + "operator": "and", + "operands": [ + { + "name": "labelAdded", + "parameters": { + "label": "Status: in PR" + } + }, + { + "name": "hasLabel", + "parameters": { + "label": "Status: in backlog" + } + } + ] + }, + "eventType": "issue", + "eventNames": [ + "issues", + "project_card" + ], + "taskName": "Remove Status: in backlog label from issue when Status: in PR label is added", + "actions": [ + { + "name": "removeLabel", + "parameters": { + "label": "Status: in backlog" + } + } + ], + "dangerZone": { + "respondToBotActions": true, + "acceptRespondToBotActions": true + } + } + }, + { + "taskType": "trigger", + "capabilityId": "IssueResponder", + "subCapability": "IssuesOnlyResponder", + "version": "1.0", + "id": "uCMkf_rmw", + "config": { + "conditions": { + "operator": "and", + "operands": [ + { + "name": "labelAdded", + "parameters": { + "label": "Status: in PR" + } + }, + { + "name": "hasLabel", + "parameters": { + "label": "Needs: attention :wave:" + } + } + ] + }, + "eventType": "issue", + "eventNames": [ + "issues", + "project_card" + ], + "taskName": "Remove Needs: attention label from issue when Status: in PR label is added", + "actions": [ + { + "name": "removeLabel", + "parameters": { + "label": "Needs: attention :wave:" + } + } + ], + "dangerZone": { + "respondToBotActions": true, + "acceptRespondToBotActions": true + } + } + } + ], + "userGroups": [] +} From 1f2647c3ba4aa62974ae7e1e24a2e38ecf36814a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 1 Jul 2022 13:52:55 -0700 Subject: [PATCH 090/336] [Word] (enums) Map to existing snippets (#662) --- .../25-paragraph/paragraph-properties.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 14852 -> 15065 bytes snippet-extractor-output/snippets.yaml | 62 ++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index dbc107e96..3cf45e285 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -65,7 +65,7 @@ script: "Replace" ); body.paragraphs.getFirst().alignment = "Left"; - body.paragraphs.getLast().alignment = "Left"; + body.paragraphs.getLast().alignment = Word.Alignment.left; }); } diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 2f9ed132cdb1f055df7af1288cc15598435f2c48..476aa7b713a0e902a47c7154393b204cf9a6602b 100644 GIT binary patch delta 7030 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 bh8c@UApU}7iAW$d^1+rx7y+|_|3Ll&ZQC>h delta 6823 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 q|DHQC5|R@N5)#q>td_@(;1icZeuZ!smqJ- + // 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(); + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different galleries.", + "Replace" + ); + body.paragraphs.getFirst().alignment = "Left"; + body.paragraphs.getLast().alignment = Word.Alignment.left; + }); 'Word.Body#getComments:member(1)': - >- // Link to full sample: @@ -11070,6 +11091,17 @@ console.log("Search term: " + result.searchTerm + " => Count: " + length); }); }); +'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 + + await Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.page, "After"); + + await context.sync(); + console.log("success"); + }); 'Word.ChangeTrackingMode:enum': - >- // Link to full sample: @@ -11578,6 +11610,21 @@ await context.sync(); console.log(base64.value); }); +'Word.InsertLocation:enum': + - >- + // 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) => { + let body = context.document.body; + body.insertBreak(Word.BreakType.sectionContinuous, Word.InsertLocation.end); + + await context.sync(); + + console.log("Inserted section without an associated page break"); + }); 'Word.NoteItem#delete:member(1)': - >- // Link to full sample: @@ -11673,6 +11720,21 @@ reference.select(); console.log("The first footnote is selected."); }); +'Word.NoteItemType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items/type"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + let mark = (referenceNumber as number) - 1; + const itemType = footnotes.items[mark].type; + console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); + }); 'Word.Paragraph#insertBreak:member(1)': - >- // Link to full sample: From 81380e594be8427505f38e47878a3d8ff1a8102e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 7 Jul 2022 16:31:11 -0700 Subject: [PATCH 091/336] [Word] Map existing examples to enums (#664) --- .../insert-and-change-content-controls.yaml | 2 +- .../get-paragraph-on-insertion-point.yaml | 2 +- samples/word/35-ranges/scroll-to-range.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 15065 -> 15185 bytes snippet-extractor-output/snippets.yaml | 220 +++++++++++++----- 5 files changed, 168 insertions(+), 58 deletions(-) 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 691a25fa0..6b289e81b 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 @@ -51,7 +51,7 @@ script: evenContentControls.items[i].set({ color: "red", title: "Odd ContentControl #" + (i + 1), - appearance: "Tags" + appearance: Word.ContentControlAppearance.tags }); evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); } 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 25631b607..17ff36bd9 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -39,7 +39,7 @@ script: context.document .getSelection() .paragraphs.getFirst() - .getRange("End") + .getRange(Word.RangeLocation.end) ) .getTextRanges(["."], false /* Don't trim spaces*/); sentencesToTheEndOfParagraph.load("text"); diff --git a/samples/word/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index 94742de62..6726a96f7 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -24,7 +24,7 @@ script: async function scrollEnd() { 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("End"); + context.document.body.paragraphs.getLast().select(Word.SelectionMode.end); await context.sync(); }); diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 476aa7b713a0e902a47c7154393b204cf9a6602b..4591c45cef3ab908b9c2d013bd57fab0c3636b97 100644 GIT binary patch delta 7212 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 ooCL!Agy^A@tC8j zGER}-OuY1fCZt%b<7q#&*;Ow(*V-Sdpm&?l8Li0w5E`)ou3m|(iA^oln&?4Y!gBm} z2Y#p^2weOO`38N=J4oKU&HJ@Vr5}p(H^|$rLkM+r9219(TlZb~Hj|MHqhd~v&A3?B zvgnLA72caXR&!5g>?Mt)q=(g<-9kZdTHcnlWLO5#G&p-txM&3$wf+odYh)r?48Sh* z7Lxs%6*0&zF&{4fJCu=U2FFfCeleFtD+Jc0MVMm?v0_)E{AD#CyNqYT^M)~;CzK?V zevC^lZ}5RiaM6`9=)KubK=#@RNb=Ud8W4a8U5Qe^lR34SnG=6E&cDKUR{((e06}!S z7PM9&N`Q-ejmm&sWRE~(igGkLwa+lp0T?iv$02BgpH!+ zYYY@@8He{FN-U0CvZb<8_9eSRcIa8C@u950={V@LV^cpa7GmI4%J0mRKAN!^;^F^! zn}$faZX4)S;Ou0B7q@zWHXafY_*?h9_!nXj*=G9j1&?12o#c)mv*!O&J`Z~8zVT5D z(jT|%cf7gh61>W^AM@}s^P|EYx#?zZ5_lAw3%@_r$TI71Sb^hh6*k4zU=z}%WbyL7 zHtE?h9{~QaS-lP9or}A_%;7VDFBdOHH)^lGm*jK2Yl;aZS)bU#{S`K_8n%$$j~Wz# zN?0ih^JJiC$YX~iqsxlivTnj&bFxABYG33woNqg0id93Y>ToktkWfc$CyS${1WD+K zxnfb&zQ2llzAXXN(6EV-wX40}8u=l575KObzMiCX$a%F*vq6gn6nRxTyFE=45>{?Q z0Nne%FtnE7g0DRkPWW{l(spxMXRHgBY8Bc4k!R#}oTZIFwVI)pxH-JGAol<{cgeFA zHDxiM=lC5h&5BiW!FYp}OKhZYCBzu{?S-CoA;Si0C39%?I8BYKsL-$^mDo2{Ik)k) zs7UJ>Q)WqYBhsVF%kj(;#l-DT@M^gzjX)yep>S{V>4SP0F_&d+1n+8;DW+zd_{f*_ z`s{}6R6Lw0s$%rlHeDKcSDX$IZoap<8^;nc%3>dPPgSI}h9rm@m$cd?|K3!(&4%Ht z|ER1-QCtgLYL>G#ajT)E19jNvzAvC zn_~!V#5s-;aS50vn@8E~C0f%EZ6i*xWX&1@T9GC#o`13)*3C>N+qE^9i<^A<=%QMw zS!^CL6*rIDm2;WnyxoC-WNy8#{NmVMb2ktia?HX|2HXS_*X~e93wLAfqVLw)n$lRT zrY&c6Y|zpx5cvZi?7;eM0||c*#&1n_dCXfmq2d)@)bb=#C>&g_COQ_fx<*Qw`6<@9 zKgTYrR}+8gzoY~(C?M55{yGzwg8vlMqo|T4qV%Jq;zEum)6LK^PD_puuwdJt1?(N1 z^hIl1QXIHI_W^m7b1m`7x6d=tcELW2zoPF;#VF4V;Dibkr-QXNjZM5e-rCDS^Setb z_oc#TMc?1+ZC>J0c0J8s6_h;45A4doE-1+x%z2oR(V4u_$Tb=wdD)O58r}S4pVrY| z6b6I8vVPT;Uk)G21z>5Dt=oEkH~cCL%3OVJcW#>{h)RlH$%gUmSwTl{E91gCTkGe< zfNF8TiNds!wVi#x#+Wmm9m#p9abpyKuCpM>D>N0mThV=UaSo%3uS+Ssn2wZH#rzDv zdm)yG{S>+}A!jjfhIeksRb#CE3?uDB$DyyhcOolpj>^6&B+^G|e zaze+7-375CG-`>b6nEG$D3QsSm=-wA;8EfuIBn;`w3`-I6FRW{_=MKMmuJ;#w5|8O zf#gG+CeE&Z-W$e{HoY2U(X|G-SwW@KxpKoc;<_|N3bR#XoSgoA_xlf$8bv567U{&y^aghcgEv-!Vb4Ermpgkntv zQv|cH{=3RT{f8X>{>L35o3gK~uV&uq8ure_@N9_G(`Ue`5y%ojI;m% delta 7103 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c52c0b3db..68109eadc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11309,7 +11309,7 @@ evenContentControls.items[i].set({ color: "red", title: "Odd ContentControl #" + (i + 1), - appearance: "Tags" + appearance: Word.ContentControlAppearance.tags }); evenContentControls.items[i].insertParagraph("This is an odd content control", "End"); } @@ -11385,6 +11385,45 @@ } console.log("Content controls inserted: " + paragraphs.items.length); + await context.sync(); + }); +'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 + + // Adds title and colors to odd and even content controls and changes their + appearance. + + await Word.run(async (context) => { + // Gets 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.ContentControlCollection#getByTag:member(1)': @@ -11735,73 +11774,46 @@ const itemType = footnotes.items[mark].type; console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); }); -'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 - - Word.run(async (context) => { - context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); - - await context.sync(); - console.log("success"); - }); -'Word.Paragraph#text:member': +'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 await Word.run(async (context) => { - // The collection of paragraphs of the current selection returns the full paragraphs contained in it. - let paragraph = context.document.getSelection().paragraphs.getFirst(); - paragraph.load("text"); - + // Gets the complete sentence (as range) associated with the insertion point. + let sentences = context.document + .getSelection() + .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); + sentences.load("$none"); await context.sync(); - console.log(paragraph.text); - }); -'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) => { - // Indents 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) => { - // Adjusts line spacing. - context.document.body.paragraphs.getFirst().lineSpacing = 20; + // Expands the range to the end of the paragraph to get all the complete sentences. + let sentencesToTheEndOfParagraph = 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(); - }); -'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(); + for (let i = 0; i < sentencesToTheEndOfParagraph.items.length; i++) { + console.log(sentencesToTheEndOfParagraph.items[i].text); + } }); -'Word.Paragraph#alignment:member': +'Word.Paragraph#insertBreak: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/25-paragraph/insert-line-and-page-breaks.yaml - await Word.run(async (context) => { - // Centers last paragraph alignment. - context.document.body.paragraphs.getLast().alignment = "Centered"; + Word.run(async (context) => { + context.document.body.paragraphs.getFirst().insertBreak(Word.BreakType.line, "After"); await context.sync(); + console.log("success"); }); 'Word.Paragraph#insertText:member(1)': - >- @@ -11833,7 +11845,7 @@ 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("End"); + context.document.body.paragraphs.getLast().select(Word.SelectionMode.end); await context.sync(); }); @@ -11918,6 +11930,63 @@ 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) => { + // Centers 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) => { + // Indents 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) => { + // Adjusts line spacing. + context.document.body.paragraphs.getFirst().lineSpacing = 20; + + 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#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 + + await Word.run(async (context) => { + // The collection of paragraphs of the current selection returns the full paragraphs contained in it. + let paragraph = context.document.getSelection().paragraphs.getFirst(); + paragraph.load("text"); + + await context.sync(); + console.log(paragraph.text); + }); 'Word.Range#getComments:member(1)': - >- // Link to full sample: @@ -11968,7 +12037,7 @@ context.document .getSelection() .paragraphs.getFirst() - .getRange("End") + .getRange(Word.RangeLocation.end) ) .getTextRanges(["."], false /* Don't trim spaces*/); sentencesToTheEndOfParagraph.load("text"); @@ -12046,6 +12115,36 @@ console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); +'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 + + await Word.run(async (context) => { + // Gets the complete sentence (as range) associated with the insertion point. + let sentences = context.document + .getSelection() + .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); + sentences.load("$none"); + await context.sync(); + + // Expands the range to the end of the paragraph to get all the complete sentences. + let sentencesToTheEndOfParagraph = 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.Section:class': - >- // Link to full sample: @@ -12102,6 +12201,17 @@ console.log("Inserted section break on next even page"); }); +'Word.SelectionMode:enum': + - >- + // 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); + + await context.sync(); + }); 'Word.Style:enum': - >- // Link to full sample: From 4410e714f0edad0f72a010a80aa915e68e898eae Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 20 Jul 2022 10:38:04 -0700 Subject: [PATCH 092/336] [Outlook] (samples) Add existing Script Lab snippets to Outlook enums (#666) * Add Script Lab snippets to Outlook enums * Removed extra samples --- snippet-extractor-metadata/outlook.xlsx | Bin 20585 -> 21250 bytes snippet-extractor-output/snippets.yaml | 5984 ++++++++++++----------- 2 files changed, 3072 insertions(+), 2912 deletions(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index d6c4264bece92aaa7a698ad75b5a7b4785789067..f4e1d56a2b6564b53d09b84e662f673fc9067f1d 100644 GIT binary patch delta 12335 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 KAfYP%1NlET4&4#} delta 11604 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 Gc>V{QgF(sw diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 68109eadc..afd372abd 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -6409,80 +6409,6 @@ await context.sync(); }); -'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 - - var settingName = $("#settingName").val(); - - var settingValue = Office.context.roamingSettings.get(settingName); - - $("#settingValue").val(settingValue); - - console.log(`The value of setting "${settingName}" is "${settingValue}".`); -'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 - - var settingName = $("#settingName").val(); - - var settingValue = $("#settingValue").val(); - - Office.context.roamingSettings.set(settingName, settingValue); - - console.log(`Setting "${settingName}" set to value "${settingValue}".`); -'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 - - // Save settings in the mailbox to make it available in future sessions. - - Office.context.roamingSettings.saveAsync(function(result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - } else { - console.log(`Settings saved with status: ${result.status}`); - } - }); -'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 - - var propertyName = $("#propertyName").val(); - - var propertyValue = customProps.get(propertyName); - - $("#propertyValue").val(propertyValue); - - console.log(`The value of custom property "${propertyName}" is - "${propertyValue}".`); -'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 - - var propertyName = $("#propertyName").val(); - - var propertyValue = $("#propertyValue").val(); - - customProps.set(propertyName, propertyValue); - - console.log(`Custom property "${propertyName}" set to value - "${propertyValue}".`); -'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 - - var propertyName = $("#propertyName").val(); - - customProps.remove(propertyName); - - console.log(`Custom property "${propertyName}" removed.`); 'Office.AppointmentCompose#loadCustomPropertiesAsync:member(1)': - >- // Link to full sample: @@ -6504,69 +6430,6 @@ console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); } }); -'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 - - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) - { - var propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { - console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); - } - }); -'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 - - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) - { - var propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { - console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); - } - }); -'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 - - Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log("Loaded following custom properties:"); - customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) - { - var propertyValue = data[propertyName]; - console.log(`${propertyName}: ${propertyValue}`); - } - } - else { - console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); - } - }); 'Office.AppointmentCompose#getSelectedDataAsync:member(2)': - >- // Link to full sample: @@ -6582,21 +6445,6 @@ console.error(asyncResult.error); } }); -'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 - - Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var text = asyncResult.value.data; - var prop = asyncResult.value.sourceProperty; - console.log("Selected text in " + prop + ": " + text); - } else { - console.error(asyncResult.error); - } - }); 'Office.AppointmentCompose#setSelectedDataAsync:member(1)': - >- // Link to full sample: @@ -6610,31 +6458,12 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#setSelectedDataAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml - - Office.context.mailbox.item.setSelectedDataAsync("Replaced", - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Selected text has been updated successfully."); - } else { - console.error(asyncResult.error); - } - }); '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.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.AppointmentCompose#saveAsync:member(1)': - >- // Link to full sample: @@ -6648,17 +6477,24 @@ console.error(`saveAsync failed with message ${result.error.message}`); } }); -'Office.MessageCompose#bcc: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-bcc-message-compose.yaml + 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.bcc.getAsync(function(asyncResult) { + Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) + { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgBcc = asyncResult.value; - console.log("Message being blind-copied to:"); - for (var i = 0; i < msgBcc.length; i++) { - console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); + var apptOptionalAttendees = asyncResult.value; + for (var i = 0; i < apptOptionalAttendees.length; i++) { + console.log( + "Optional attendees: " + + apptOptionalAttendees[i].displayName + + " (" + + apptOptionalAttendees[i].emailAddress + + ") - response: " + + apptOptionalAttendees[i].appointmentResponse + ); } } else { console.error(asyncResult.error); @@ -6666,73 +6502,35 @@ }); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml - var email = $("#emailBcc") + var email = $("#emailOptional") .val() .toString(); var emailArray = [email]; - Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting Bcc field."); - } else { - console.error(asyncResult.error); - } - }); -'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 - - Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgBcc = asyncResult.value; - console.log("Message being blind-copied to:"); - for (var i = 0; i < msgBcc.length; i++) { - console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); - } - } else { - console.error(asyncResult.error); - } - }); - - >- - // 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) { + Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, + function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgCc = asyncResult.value; - console.log("Message being copied to:"); - for (var i = 0; i < msgCc.length; i++) { - console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); - } + console.log("Succeeded in setting optional attendees field."); } else { console.error(asyncResult.error); } }); +'Office.AppointmentCompose#organizer: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml - Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) - { + Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOptionalAttendees = asyncResult.value; - for (var i = 0; i < apptOptionalAttendees.length; i++) { - console.log( - "Optional attendees: " + - apptOptionalAttendees[i].displayName + - " (" + - apptOptionalAttendees[i].emailAddress + - ") - response: " + - apptOptionalAttendees[i].appointmentResponse - ); - } + var apptOrganizer = asyncResult.value; + console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); } else { console.error(asyncResult.error); } }); +'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 @@ -6757,310 +6555,253 @@ }); - >- // 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 + 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.to.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgTo = asyncResult.value; - console.log("Message being sent to:"); - for (var i = 0; i < msgTo.length; i++) { - console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); - } - } else { - console.error(asyncResult.error); - } - }); -'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 - - var email = $("#emailBcc") + var email = $("#emailRequired") .val() .toString(); var emailArray = [email]; - Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { + Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, + function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting Bcc field."); + console.log("Succeeded in setting required attendees field."); } else { console.error(asyncResult.error); } }); +'Office.AppointmentCompose#notificationMessages: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var email = $("#emailCc") - .val() - .toString(); - var emailArray = [email]; + var id = $("#notificationId").val(); - Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting Cc field."); - } else { - console.error(asyncResult.error); - } - }); + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var email = $("#emailOptional") - .val() - .toString(); - var emailArray = [email]; + var id = $("#notificationId").val(); - Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting optional attendees field."); - } else { - console.error(asyncResult.error); - } - }); + var details = + { + type: "informationalMessage", + message: "Non-persistent informational notification message with id = " + id, + icon: "icon1", + persistent: false + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var email = $("#emailRequired") - .val() - .toString(); - var emailArray = [email]; + var id = $("#notificationId").val(); - Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting required attendees field."); - } else { - console.error(asyncResult.error); - } - }); + var details = + { + type: "informationalMessage", + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // 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 - - var email = $("#emailTo") - .val() - .toString(); - var emailArray = [email]; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting To field."); - } else { - console.error(asyncResult.error); - } - }); -'Office.MessageCompose#cc:member': + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.cc.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgCc = asyncResult.value; - console.log("Message being copied to:"); - for (var i = 0; i < msgCc.length; i++) { - console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); - } - } else { - console.error(asyncResult.error); - } - }); + var id = $("#notificationId").val(); + + Office.context.mailbox.item.notificationMessages.replaceAsync( + id, + { + type: "informationalMessage", + message: "Notification message with id = " + id + " has been replaced with an informational message.", + icon: "icon2", + persistent: false + }, + handleResult); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var email = $("#emailCc") - .val() - .toString(); - var emailArray = [email]; + var id = $("#notificationId").val(); - Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting Cc field."); - } else { - console.error(asyncResult.error); - } - }); -'Office.MessageRead#cc:member': + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'Office.AppointmentCompose#addFileAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml - - var msgCc = Office.context.mailbox.item.cc; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - console.log("Message copied to:"); + var attachmentUrl = $("#attachmentUrl").val(); - for (var i = 0; i < msgCc.length; i++) { - console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); - } -'Office.MessageCompose#from:member': + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { "asyncContext" : { var1: 1, var2: true } }, + function(result) { console.log(result); }); +'Office.AppointmentCompose#addItemAttachmentAsync: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.from.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgFrom = asyncResult.value; - console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); - } else { - console.error(asyncResult.error); - } - }); -'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 + var attachmentItemId = $("#attachmentItemId").val(); - Office.context.mailbox.item.from.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgFrom = asyncResult.value; - console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); - } else { - console.error(asyncResult.error); - } - }); -'Office.MessageRead#from:member': + Office.context.mailbox.item.addItemAttachmentAsync( + attachmentItemId, + "My attachment", + { "asyncContext" : { var3: 3, var4: false } }, + function(result) { console.log(result); }); +'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - var msgFrom = Office.context.mailbox.item.from; + base64String = + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; - console.log("Message received from: " + msgFrom.displayName + " (" + - msgFrom.emailAddress + ")"); -'Office.AppointmentRead#optionalAttendees:member': + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + base64String, + "logo.png", + { isInline: false }, + function(result) { console.log(result); }); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - var apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; + // Set the signature for the current item with inline image. - console.log("Optional attendees:"); + var modIcon1Base64 = + "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; - for (var i = 0; i < apptOptionalAttendees.length; i++) { - console.log( - apptOptionalAttendees[i].displayName + - " (" + - apptOptionalAttendees[i].emailAddress + - ") - response: " + - apptOptionalAttendees[i].appointmentResponse - ); - } -'Office.AppointmentCompose#optionalAttendees:member': + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + modIcon1Base64, + "myImage.png", + { isInline: true }, + function(result) { + if (result.status == Office.AsyncResultStatus.Succeeded) { + var signature = $("#signature").val() + ""; + console.log(`Setting signature to "${signature}".`); + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); + } + ); + } else { + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + } + } + ); +'Office.AppointmentCompose#getAttachmentsAsync:member(1)': - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOptionalAttendees = asyncResult.value; - for (var i = 0; i < apptOptionalAttendees.length; i++) { - console.log( - "Optional attendees: " + - apptOptionalAttendees[i].displayName + - " (" + - apptOptionalAttendees[i].emailAddress + - ") - response: " + - apptOptionalAttendees[i].appointmentResponse - ); + 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 (var i = 0; i < result.value.length; i++) { + var attachment = result.value[i]; + console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); + } + } + else { + console.log("No attachments on this message."); + } } - } else { - console.error(asyncResult.error); - } }); +'Office.AppointmentCompose#removeAttachmentAsync:member(1)': - >- // 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 - - var email = $("#emailOptional") - .val() - .toString(); - var emailArray = [email]; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting optional attendees field."); - } else { - console.error(asyncResult.error); - } - }); -'Office.AppointmentRead#organizer:member': + 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.AppointmentCompose#getAttachmentContentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - var apptOrganizer = Office.context.mailbox.item.organizer; + var item = Office.context.mailbox.item; - console.log("Organizer: " + apptOrganizer.displayName + " (" + - apptOrganizer.emailAddress + ")"); -'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 + var options = {asyncContext: {currentItem: item}}; - Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOrganizer = asyncResult.value; - console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); - } else { - console.error(asyncResult.error); - } - }); -'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 + item.getAttachmentsAsync(options, callback); - Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOrganizer = asyncResult.value; - console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); - } else { - console.error(asyncResult.error); - } - }); -'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 - var apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; + function callback(result) { + if (result.value.length > 0) { + for (i = 0 ; i < result.value.length ; i++) { + result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); + } + } + } - console.log("Required attendees:"); - for (var i = 0; i < apptRequiredAttendees.length; i++) { - console.log( - apptRequiredAttendees[i].displayName + - " (" + - apptRequiredAttendees[i].emailAddress + - ") - response: " + - apptRequiredAttendees[i].appointmentResponse - ); + function handleAttachmentsCallback(result) { + // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log(result.value.content); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that are not supported. + } } -'Office.AppointmentCompose#requiredAttendees:member': +'Office.AppointmentCompose#categories: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) - { + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptRequiredAttendees = asyncResult.value; - for (var i = 0; i < apptRequiredAttendees.length; i++) { - console.log( - "Required attendees: " + - apptRequiredAttendees[i].displayName + - " (" + - apptRequiredAttendees[i].emailAddress + - ") - response: " + - apptRequiredAttendees[i].appointmentResponse - ); + var categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Categories assigned to this item:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories assigned to this item."); } } else { console.error(asyncResult.error); @@ -7068,376 +6809,554 @@ }); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - var email = $("#emailRequired") - .val() - .toString(); - var emailArray = [email]; + // Note: In order for you to successfully add a category, - Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, - function(asyncResult) { + // it must be in the mailbox categories master list. + + + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting required attendees field."); + var masterCategories = asyncResult.value; + if (masterCategories && masterCategories.length > 0) { + // Grab the first category from the master list. + var categoryToAdd = [masterCategories[0].displayName]; + Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully assigned category '${categoryToAdd}' to item.`); + } else { + console.log("categories.addAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); + } } else { console.error(asyncResult.error); } }); -'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 - - var msgSender = Office.context.mailbox.item.sender; - - console.log("Sender: " + msgSender.displayName + " (" + - msgSender.emailAddress + ")"); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.to.getAsync(function(asyncResult) { + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgTo = asyncResult.value; - console.log("Message being sent to:"); - for (var i = 0; i < msgTo.length; i++) { - console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + var categories = asyncResult.value; + if (categories && categories.length > 0) { + // Grab the first category assigned to this item. + var categoryToRemove = [categories[0].displayName]; + Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); + } else { + console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories assigned to this item."); } } else { console.error(asyncResult.error); } }); +'Office.AppointmentCompose#recurrence: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 - - var email = $("#emailTo") - .val() - .toString(); - var emailArray = [email]; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml - Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { + Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting To field."); + var recurrence = asyncResult.value; + if (recurrence === null) { + console.log("This is a single appointment."); + } else { + console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); + } } else { console.error(asyncResult.error); } }); -'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 - - var msgTo = Office.context.mailbox.item.to; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml - console.log("Message sent to:"); + // Important: Can only set the recurrence pattern of an appointment series. - for (var i = 0; i < msgTo.length; i++) { - console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); - } -'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 - var id = $("#notificationId").val(); + var currentDate = new Date(); - var details = - { - type: "progressIndicator", - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + let seriesTimeObject : Office.SeriesTime; - var id = $("#notificationId").val(); + // Set series start date to tomorrow. - var details = - { - type: "informationalMessage", - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + seriesTimeObject.setStartDate( + currentDate.getFullYear(), + currentDate.getMonth(), + currentDate.getDay() + 1 + ); - var id = $("#notificationId").val(); + // Set series end date to 1 month from now. - var details = - { - type: "informationalMessage", - message: "Persistent informational notification message with id = " + id, - icon: "icon1", - persistent: true - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + seriesTimeObject.setEndDate( + currentDate.getFullYear(), + currentDate.getMonth() + 1, + currentDate.getDay() + ); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. + + seriesTimeObject.setDuration(30); + + + let pattern : Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: "weekly", + recurrenceProperties: { interval: 1, days: ["tue", "thu"], firstDayOfWeek: "sun" }, + recurrenceTimeZone: { name: "Pacific Standard Time" } + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; + } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); + }); +'Office.AppointmentCompose#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + var seriesId = Office.context.mailbox.item.seriesId; + + + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); + } +'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - var id = $("#notificationId").val(); + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on an item from a shared folder."); + return; + } - Office.context.mailbox.item.notificationMessages.replaceAsync( - id, - { - type: "informationalMessage", - message: "Notification message with id = " + id + " has been replaced with an informational message.", - icon: "icon2", - persistent: false - }, - handleResult); + + 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/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - var id = $("#notificationId").val(); + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on an appointment from a shared folder."); + return; + } - Office.context.mailbox.item.notificationMessages.removeAsync(id, - handleResult); -'Office.AppointmentRead#notificationMessages:member': + + 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) { + var ewsId = Office.context.mailbox.item.itemId; + var 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.AppointmentCompose#getItemIdAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml - var details = - { - type: "progressIndicator", - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.getItemIdAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`getItemIdAsync failed with message: ${result.error.message}`); + } else { + console.log(result.value); + } + }); +'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - var id = $("#notificationId").val(); + // Disable the client signature. - var details = - { - type: "informationalMessage", - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("disableClientSignatureAsync succeeded"); + } else { + console.error(asyncResult.error); + } + }); +'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - var id = $("#notificationId").val(); + // Check if the client signature is currently enabled. - var details = - { - type: "informationalMessage", - message: "Persistent informational notification message with id = " + id, - icon: "icon1", - persistent: true - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("isClientSignatureEnabledAsync succeeded with result: " + asyncResult.value); + } else { + console.error(asyncResult.error); + } + }); +'Office.AppointmentCompose#subject:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + Office.context.mailbox.item.subject.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Subject: ${result.value}`); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml - var id = $("#notificationId").val(); + let subject = "Hello World!"; - Office.context.mailbox.item.notificationMessages.replaceAsync( - id, - { - type: "informationalMessage", - message: "Notification message with id = " + id + " has been replaced with an informational message.", - icon: "icon2", - persistent: false - }, - handleResult); + Office.context.mailbox.item.subject.setAsync(subject, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set subject to ${subject}`); + }); +'Office.AppointmentCompose#itemType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml - var id = $("#notificationId").val(); + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); +'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 - Office.context.mailbox.item.notificationMessages.removeAsync(id, - handleResult); -'Office.MessageCompose#notificationMessages:member': + Office.context.mailbox.item.start.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Appointment starts: ${result.value}`); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml - var id = $("#notificationId").val(); + var start = new Date(); // Represents current date and time. - var details = - { - type: "progressIndicator", - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + start.setDate(start.getDate() + 2); // Add 2 days to current date. + + Office.context.mailbox.item.start.setAsync(start, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set start date and time to ${start}`); + }); +'Office.AppointmentCompose#end:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml - var details = - { - type: "informationalMessage", - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.end.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Appointment ends: ${result.value}`); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml - var id = $("#notificationId").val(); + Office.context.mailbox.item.start.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Get start date failed with message ${result.error.message}`); + return; + } - var details = - { - type: "informationalMessage", - message: "Persistent informational notification message with id = " + id, - icon: "icon1", - persistent: true - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + var end = result.value; // Set end to current start date and time. + end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. + Office.context.mailbox.item.end.setAsync(end, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Set end date failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set end date and time to ${end}`); + }); + }); +'Office.AppointmentCompose#location:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + 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.notificationMessages.getAllAsync(handleResult); + Office.context.mailbox.item.location.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Appointment location: ${result.value}`); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-location-appointment-organizer.yaml - var id = $("#notificationId").val(); + var location = "my office"; - Office.context.mailbox.item.notificationMessages.replaceAsync( - id, - { - type: "informationalMessage", - message: "Notification message with id = " + id + " has been replaced with an informational message.", - icon: "icon2", - persistent: false - }, - handleResult); + Office.context.mailbox.item.location.setAsync(location, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set location to ${location}`); + }); +'Office.AppointmentCompose#enhancedLocation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + 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.notificationMessages.removeAsync(id, - handleResult); -'Office.MessageRead#notificationMessages:member': + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to get locations. Error message: ${result.error.message}`); + return; + } + var places = result.value; + if (places && places.length > 0) { + result.value.forEach(function(place) { + console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); + if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { + console.log("Email address: " + place.emailAddress); + } + }); + } else { + console.log("There are no locations."); + } + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml - var details = + var locations = [ { - type: "progressIndicator", - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom + }, + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room + } + ]; + + Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => + { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully added locations ${JSON.stringify(locations)}`); + } else { + console.error(`Failed to add locations. Error message: ${result.error.message}`); + } + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml - var details = + var locations = [ { - type: "informationalMessage", - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom + }, + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room + } + ]; + + Office.context.mailbox.item.enhancedLocation.removeAsync(locations, (result) + => { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully removed locations ${JSON.stringify(locations)}`); + } else { + console.error(`Failed to remove locations. Error message: ${result.error.message}`); + } + }); +'Office.AppointmentCompose#isAllDayEvent:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - var details = - { - type: "informationalMessage", - message: "Persistent informational notification message with id = " + id, - icon: "icon1", - persistent: true - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Is this an all-day event? " + asyncResult.value); + } else { + console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); + } + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + Office.context.mailbox.item.isAllDayEvent.setAsync(true, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Failed to set all-day event: " + JSON.stringify(asyncResult.error)); + } else { + console.log("Appointment set to all-day event."); + } + }); +'Office.AppointmentCompose#sensitivity:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - Office.context.mailbox.item.notificationMessages.replaceAsync( - id, - { - type: "informationalMessage", - message: "Notification message with id = " + id + " has been replaced with an informational message.", - icon: "icon2", - persistent: false - }, - handleResult); + 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)); + } + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - Office.context.mailbox.item.notificationMessages.removeAsync(id, - handleResult); -'Office.NotificationMessages#addAsync:member(1)': + 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."); + } + } + ); +'Office.AppointmentCompose#sessionData:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - - var id = $("#notificationId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml - var details = - { - type: "progressIndicator", - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("The sessionData is " + JSON.stringify(asyncResult.value)); + } else { + console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); +'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 + + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log("Loaded following custom properties:"); + customProps = result.value; + var dataKey = Object.keys(customProps)[0]; + var data = customProps[dataKey]; + for (var propertyName in data) + { + var propertyValue = data[propertyName]; + console.log(`${propertyName}: ${propertyValue}`); + } + } + else { + console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + } + }); +'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 + + var apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; + + console.log("Optional attendees:"); + + for (var i = 0; i < apptOptionalAttendees.length; i++) { + console.log( + apptOptionalAttendees[i].displayName + + " (" + + apptOptionalAttendees[i].emailAddress + + ") - response: " + + apptOptionalAttendees[i].appointmentResponse + ); + } +'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 + + var apptOrganizer = Office.context.mailbox.item.organizer; + + console.log("Organizer: " + apptOrganizer.displayName + " (" + + apptOrganizer.emailAddress + ")"); +'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 + + var apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; + + console.log("Required attendees:"); + + for (var i = 0; i < apptRequiredAttendees.length; i++) { + console.log( + apptRequiredAttendees[i].displayName + + " (" + + apptRequiredAttendees[i].emailAddress + + ") - response: " + + apptRequiredAttendees[i].appointmentResponse + ); + } +'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 @@ -7446,10 +7365,8 @@ var details = { - type: "informationalMessage", - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false + type: "progressIndicator", + message: "Progress indicator with id = " + id }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); @@ -7462,9 +7379,9 @@ var details = { type: "informationalMessage", - message: "Persistent informational notification message with id = " + id, + message: "Non-persistent informational notification message with id = " + id, icon: "icon1", - persistent: true + persistent: false }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); @@ -7476,18 +7393,18 @@ var details = { - type: "errorMessage", - message: "Error notification message with id = " + id + type: "informationalMessage", + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); -'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 Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); -'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 @@ -7503,7 +7420,6 @@ persistent: false }, handleResult); -'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 @@ -7512,547 +7428,621 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.AppointmentCompose#addFileAttachmentAsync:member(1)': +'Office.AppointmentRead#getAttachmentContentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - var attachmentUrl = $("#attachmentUrl").val(); + var item = Office.context.mailbox.item; - Office.context.mailbox.item.addFileAttachmentAsync( - attachmentUrl, - getFileName(attachmentUrl), - { "asyncContext" : { var1: 1, var2: true } }, - function(result) { console.log(result); }); -'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 + var options = {asyncContext: {currentItem: item}}; - var attachmentUrl = $("#attachmentUrl").val(); + item.getAttachmentsAsync(options, callback); - Office.context.mailbox.item.addFileAttachmentAsync( - attachmentUrl, - getFileName(attachmentUrl), - { "asyncContext" : { var1: 1, var2: true } }, - function(result) { console.log(result); }); -'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 - var attachmentItemId = $("#attachmentItemId").val(); + function callback(result) { + if (result.value.length > 0) { + for (i = 0 ; i < result.value.length ; i++) { + result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); + } + } + } - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); -'Office.MessageCompose#addItemAttachmentAsync:member(1)': + + function handleAttachmentsCallback(result) { + // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log(result.value.content); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that are not supported. + } + } +'Office.AppointmentRead#attachments:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml - var attachmentItemId = $("#attachmentItemId").val(); + var attachments = Office.context.mailbox.item.attachments; - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); -'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': + console.log(attachments); +'Office.AppointmentRead#categories:member': - >- // 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="; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Categories assigned to this item:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories assigned to this item."); + } + } else { + console.error(asyncResult.error); + } + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - // Set the signature for the current item with inline image. + // Note: In order for you to successfully add a category, - var modIcon1Base64 = - "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; + // it must be in the mailbox categories master list. - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - modIcon1Base64, - "myImage.png", - { isInline: true }, - function(result) { - if (result.status == Office.AsyncResultStatus.Succeeded) { - var signature = $("#signature").val() + ""; - console.log(`Setting signature to "${signature}".`); - Office.context.mailbox.item.body.setSignatureAsync( - signature, - { coercionType: "html" }, - function(asyncResult) { - console.log(`setSignatureAsync: ${asyncResult.status}`); + + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var masterCategories = asyncResult.value; + if (masterCategories && masterCategories.length > 0) { + // Grab the first category from the master list. + var categoryToAdd = [masterCategories[0].displayName]; + Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully assigned category '${categoryToAdd}' to item.`); + } else { + console.log("categories.addAsync call failed with error: " + asyncResult.error.message); } - ); + }); } else { - console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); } + } else { + console.error(asyncResult.error); } - ); -'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="; - - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - - // Set the signature for the current item with inline image. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - var modIcon1Base64 = - "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; - - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - modIcon1Base64, - "myImage.png", - { isInline: true }, - function(result) { - if (result.status == Office.AsyncResultStatus.Succeeded) { - var signature = $("#signature").val() + ""; - console.log(`Setting signature to "${signature}".`); - Office.context.mailbox.item.body.setSignatureAsync( - signature, - { coercionType: "html" }, - function(asyncResult) { - console.log(`setSignatureAsync: ${asyncResult.status}`); + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories && categories.length > 0) { + // Grab the first category assigned to this item. + var categoryToRemove = [categories[0].displayName]; + Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); + } else { + console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); } - ); + }); } else { - console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + console.log("There are no categories assigned to this item."); } + } else { + console.error(asyncResult.error); } - ); -'Office.AppointmentCompose#getAttachmentsAsync:member(1)': + }); +'Office.AppointmentRead#recurrence:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.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 (var i = 0; i < result.value.length; i++) { - var attachment = result.value[i]; - console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); - } - } - else { - console.log("No attachments on this message."); - } - } - }); -'Office.MessageCompose#getAttachmentsAsync:member(1)': + var recurrence = Office.context.mailbox.item.recurrence; + + + if (recurrence === undefined) { + console.log("This item is a message but not a meeting request."); + } else if (recurrence === null) { + console.log("This is a single appointment."); + } else { + console.log(JSON.stringify(recurrence)); + } +'Office.AppointmentRead#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - Office.context.mailbox.item.getAttachmentsAsync(function (result) { + var seriesId = Office.context.mailbox.item.seriesId; + + + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); + } +'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 + + 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: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: 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) { - console.error(result.error.message); - } else { - if (result.value.length > 0) { - for (var i = 0; i < result.value.length; i++) { - var attachment = result.value[i]; - console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); - } - } - else { - console.log("No attachments on this message."); - } + console.error(`Action failed with message ${result.error.message}`); } + } }); -'Office.AppointmentCompose#removeAttachmentAsync:member(1)': +'Office.AppointmentRead#displayReplyAllForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml - 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.MessageCompose#removeAttachmentAsync:member(1)': + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with + some bold text."); +'Office.AppointmentRead#displayReplyFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml - 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.AppointmentCompose#getAttachmentContentAsync:member(1)': + Office.context.mailbox.item.displayReplyFormAsync("This is a reply with + some text in italics.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - var item = Office.context.mailbox.item; + // The async version is only available starting with requirement set 1.9, - var options = {asyncContext: {currentItem: item}}; + // and provides a callback when the new appointment form has been created. - item.getAttachmentsAsync(options, callback); + Office.context.mailbox.item.displayReplyFormAsync( + { + htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", + attachments: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } + ] + }, + function(asyncResult) { + console.log(JSON.stringify(asyncResult)); + } + ); +'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 + Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL + with some bold text.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); + }); +'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 - function callback(result) { - if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on an item from a shared folder."); + return; } - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } - } -'Office.AppointmentRead#getAttachmentContentAsync:member(1)': + 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/40-attachments/get-attachment-content.yaml - - var item = Office.context.mailbox.item; - - var options = {asyncContext: {currentItem: item}}; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - item.getAttachmentsAsync(options, callback); + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on an appointment from a shared folder."); + return; + } - function callback(result) { - if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } - } + 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) { + var ewsId = Office.context.mailbox.item.itemId; + var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + let rest_url = + sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/events/" + restId; - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } - } -'Office.MessageCompose#getAttachmentContentAsync:member(1)': + $.ajax({ + url: rest_url, + dataType: "json", + headers: { Authorization: "Bearer " + result2.asyncContext } + }) + .done(function(response) { + console.log(response); + }) + .fail(function(error) { + console.error(error); + }); + } + } + ); + } + }); +'Office.AppointmentRead#getEntities:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - - var item = Office.context.mailbox.item; - - var options = {asyncContext: {currentItem: item}}; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - item.getAttachmentsAsync(options, callback); + var entities = Office.context.mailbox.item.getEntities(); + var entityTypesFound = 0; - function callback(result) { - if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } + if (entities.addresses.length > 0) { + console.warn("physical addresses: "); + console.log(entities.addresses); + entityTypesFound++; } - - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + if (entities.contacts.length > 0) { + console.warn("contacts: "); + entities.contacts.forEach(function (contact) { console.log(contact.personName); }) + entityTypesFound++; } -'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 - var item = Office.context.mailbox.item; + if (entities.emailAddresses.length > 0) { + console.warn("email addresses: "); + console.log(entities.emailAddresses); + entityTypesFound++; + } - var options = {asyncContext: {currentItem: item}}; + if (entities.meetingSuggestions.length > 0) { + console.warn("meetings suggestions: "); + entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) + entityTypesFound++; + } - item.getAttachmentsAsync(options, callback); + 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++; + } - function callback(result) { - if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } + if (entities.urls.length > 0) { + console.warn("URLs: "); + console.log(entities.urls); + entityTypesFound++; } + if (entityTypesFound == 0) - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + { + console.log("No entities found on this item."); } -'Office.AppointmentRead#attachments:member': +'Office.AppointmentRead#getEntitiesByType:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml - - var attachments = Office.context.mailbox.item.attachments; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - console.log(attachments); -'Office.MessageRead#attachments:member': + 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/40-attachments/get-attachments-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - var attachments = Office.context.mailbox.item.attachments; + // This API would only work when you click on highlighted physical address + that has the word "Way" in it. - console.log(attachments); -'Office.AppointmentCompose#categories:member': + 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/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Categories assigned to this item:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories assigned to this item."); - } - } else { - console.error(asyncResult.error); - } - }); + // This API would only work when you click on 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/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. + 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". - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; - if (masterCategories && masterCategories.length > 0) { - // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; - Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully assigned category '${categoryToAdd}' to item.`); - } else { - console.log("categories.addAsync call failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); - } - } else { - console.error(asyncResult.error); - } - }); + 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/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; - Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); - } else { - console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("There are no categories assigned to this item."); - } - } else { - console.error(asyncResult.error); - } - }); -'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 + var entities = Office.context.mailbox.item.getSelectedEntities(); - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Categories assigned to this item:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories assigned to this item."); - } - } else { - console.error(asyncResult.error); - } - }); - - >- + var 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/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - // Note: In order for you to successfully add a category, + var matches = Office.context.mailbox.item.getSelectedRegExMatches(); - // it must be in the mailbox categories master list. + 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."); + } +'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.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 - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; - if (masterCategories && masterCategories.length > 0) { - // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; - Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully assigned category '${categoryToAdd}' to item.`); - } else { - console.log("categories.addAsync call failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); - } + 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 + + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); +'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#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 + + console.log(`Normalized subject: + ${Office.context.mailbox.item.normalizedSubject}`); +'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 + + console.log(`Creation date and time: + ${Office.context.mailbox.item.dateTimeCreated}`); +'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 + + console.log(`Date and time item last modified: + ${Office.context.mailbox.item.dateTimeModified}`); +'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#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 + + console.log(`Appointment location: + ${Office.context.mailbox.item.location}`); +'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}`); + return; + } + var places = result.value; + if (places && places.length > 0) { + result.value.forEach(function(place) { + console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); + if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { + console.log("Email address: " + place.emailAddress); + } + }); } else { - console.error(asyncResult.error); + console.log("There are no locations."); } }); +'Office.AppointmentSensitivity:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; - Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); - } else { - console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); + 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."); + } + } + ); +'Office.AttachmentContentFormat:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + + function handleAttachmentsCallback(result) { + // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log(result.value.content); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that are not supported. + } + } +'Office.Body#setSignatureAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + + // Set the signature for the current item with inline image. + + var modIcon1Base64 = + "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; + + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + modIcon1Base64, + "myImage.png", + { isInline: true }, + function(result) { + if (result.status == Office.AsyncResultStatus.Succeeded) { + var signature = $("#signature").val() + ""; + console.log(`Setting signature to "${signature}".`); + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); } - }); + ); } else { - console.log("There are no categories assigned to this item."); + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); } + } + ); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + + // Set the signature for the current item. + + var signature = $("#signature").val(); + + console.log(`Setting signature to "${signature}".`); + + Office.context.mailbox.item.body.setSignatureAsync(signature, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("setSignatureAsync succeeded"); } else { console.error(asyncResult.error); } }); -'Office.MessageCompose#categories:member': +'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 @@ -8070,6 +8060,7 @@ console.error(asyncResult.error); } }); +'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 @@ -8099,6 +8090,7 @@ console.error(asyncResult.error); } }); +'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 @@ -8123,204 +8115,320 @@ console.error(asyncResult.error); } }); -'Office.MessageRead#categories:member': +'Office.CategoryColor:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + var masterCategoriesToAdd = [ + { + displayName: "TestCategory", + color: Office.MailboxEnums.CategoryColor.Preset0 + } + ]; + + + Office.context.mailbox.masterCategories.addAsync(masterCategoriesToAdd, + function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Categories assigned to this item:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories assigned to this item."); - } + console.log("Successfully added categories to master list"); } else { - console.error(asyncResult.error); + console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); +'Office.CustomProperties#get:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - // Note: In order for you to successfully add a category, + var propertyName = $("#propertyName").val(); - // it must be in the mailbox categories master list. + var propertyValue = customProps.get(propertyName); + $("#propertyValue").val(propertyValue); - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; - if (masterCategories && masterCategories.length > 0) { - // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; - Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully assigned category '${categoryToAdd}' to item.`); - } else { - console.log("categories.addAsync call failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); - } - } else { - console.error(asyncResult.error); - } - }); + console.log(`The value of custom property "${propertyName}" is + "${propertyValue}".`); +'Office.CustomProperties#set:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; - Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); - } else { - console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("There are no categories assigned to this item."); - } - } else { - console.error(asyncResult.error); - } - }); -'Office.Categories#getAsync:member(2)': + var propertyName = $("#propertyName").val(); + + var propertyValue = $("#propertyValue").val(); + + customProps.set(propertyName, propertyValue); + + console.log(`Custom property "${propertyName}" set to value + "${propertyValue}".`); +'Office.CustomProperties#remove:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Categories assigned to this item:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories assigned to this item."); - } - } else { - console.error(asyncResult.error); - } - }); -'Office.Categories#addAsync:member(1)': + var propertyName = $("#propertyName").val(); + + customProps.remove(propertyName); + + console.log(`Custom property "${propertyName}" removed.`); +'Office.DelegatePermissions:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - // Note: In order for you to successfully add a category, + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on an appointment from a shared folder."); + return; + } - // it must be in the mailbox categories master list. + 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; - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; - if (masterCategories && masterCategories.length > 0) { - // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; - Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully assigned category '${categoryToAdd}' to item.`); - } else { - console.log("categories.addAsync call failed with error: " + asyncResult.error.message); + // Determine if user has the appropriate permission to do the operation. + if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { + var ewsId = Office.context.mailbox.item.itemId; + var 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); + }); } - }); - } else { - console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); - } - } else { - console.error(asyncResult.error); + } + ); } }); -'Office.Categories#removeAsync:member(1)': +'Office.EnhancedLocation#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + 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.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; - Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); - } else { - console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("There are no categories assigned to this item."); - } + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to get locations. Error message: ${result.error.message}`); + return; + } + var places = result.value; + if (places && places.length > 0) { + result.value.forEach(function(place) { + console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); + if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { + console.log("Email address: " + place.emailAddress); + } + }); } else { - console.error(asyncResult.error); + console.log("There are no locations."); } }); -'Office.Mailbox#masterCategories:member': +'Office.EnhancedLocation#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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Master categories:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories in the master list."); - } + var locations = [ + { + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom + }, + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room + } + ]; + + Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => + { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully added locations ${JSON.stringify(locations)}`); } else { - console.error(asyncResult.error); + console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); +'Office.EnhancedLocation#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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml - var masterCategoriesToAdd = [ + var locations = [ { - displayName: "TestCategory", - color: Office.MailboxEnums.CategoryColor.Preset0 + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom + }, + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room } ]; - - Office.context.mailbox.masterCategories.addAsync(masterCategoriesToAdd, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Successfully added categories to master list"); + Office.context.mailbox.item.enhancedLocation.removeAsync(locations, (result) + => { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully removed locations ${JSON.stringify(locations)}`); } else { - console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); + console.error(`Failed to remove locations. Error message: ${result.error.message}`); } }); +'Office.EntityType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - - var masterCategoriesToRemove = ["TestCategory"]; - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - Office.context.mailbox.masterCategories.removeAsync(masterCategoriesToRemove, - function(asyncResult) { + console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); +'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 + + Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Successfully removed categories from master list"); + var msgFrom = asyncResult.value; + console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); } else { - console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); + console.error(asyncResult.error); } }); -'Office.MasterCategories#getAsync:member(2)': +'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 + + Office.context.mailbox.item.internetHeaders.getAsync( + ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], + function (asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Selected headers: " + JSON.stringify(asyncResult.value)); + } else { + console.log("Error getting selected headers: " + JSON.stringify(asyncResult.error)); + } + } + ); +'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 + + Office.context.mailbox.item.internetHeaders.removeAsync( + ["x-best-vegetable", "x-nonexistent-header"], + function (asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Successfully removed selected headers"); + } else { + console.log("Error removing selected headers: " + JSON.stringify(asyncResult.error)); + } + } + ); +'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 + + Office.context.mailbox.item.internetHeaders.setAsync( + { "x-preferred-fruit": "orange", "x-preferred-vegetable": "broccoli", "x-best-vegetable": "spinach" }, + function (asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Successfully set headers"); + } else { + console.log("Error setting headers: " + JSON.stringify(asyncResult.error)); + } + } + + ); +'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 + + Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Is this an all-day event? " + asyncResult.value); + } else { + console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); + } + }); +'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 + + Office.context.mailbox.item.isAllDayEvent.setAsync(true, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Failed to set all-day event: " + JSON.stringify(asyncResult.error)); + } else { + console.log("Appointment set to all-day event."); + } + }); +'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 + + Office.context.mailbox.item.location.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Appointment location: ${result.value}`); + }); +'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 + + var location = "my office"; + + Office.context.mailbox.item.location.setAsync(location, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set location to ${location}`); + }); +'Office.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 + + var locations = [ + { + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom + }, + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room + } + ]; + + Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => + { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully added locations ${JSON.stringify(locations)}`); + } else { + console.error(`Failed to add locations. Error message: ${result.error.message}`); + } + }); +'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 @@ -8338,7 +8446,6 @@ console.error(asyncResult.error); } }); -'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 @@ -8359,7 +8466,6 @@ console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); -'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 @@ -8375,1671 +8481,1713 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); -'Office.AppointmentCompose#recurrence:member': +'Office.Mailbox#displayAppointmentForm: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml - Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var recurrence = asyncResult.value; - if (recurrence === null) { - console.log("This is a single appointment."); - } else { - console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); - } - } else { - console.error(asyncResult.error); - } - }); + var itemId = $("#itemId").val(); + + Office.context.mailbox.displayAppointmentForm(itemId); +'Office.Mailbox#displayMessageForm: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 - - // Important: Can only set the recurrence pattern of an appointment series. - - - var currentDate = new Date(); - - let seriesTimeObject : Office.SeriesTime; - - // Set series start date to tomorrow. - - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); - - // Set series end date to 1 month from now. - - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); - - // Set start time to 1:30 PM. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml - seriesTimeObject.setStartTime(13, 30); + var itemId = $("#itemId").val(); - // Set duration to 30 minutes. + Office.context.mailbox.displayMessageForm(itemId); +'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 - seriesTimeObject.setDuration(30); + var start = new Date(); + var end = new Date(); - let pattern : Office.Recurrence = { - seriesTime: seriesTimeObject, - recurrenceType: "weekly", - recurrenceProperties: { interval: 1, days: ["tue", "thu"], firstDayOfWeek: "sun" }, - recurrenceTimeZone: { name: "Pacific Standard Time" } - }; + end.setHours(start.getHours() + 1); - Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { - if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); - return; - } - console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); + Office.context.mailbox.displayNewAppointmentForm({ + requiredAttendees: ["bob@contoso.com"], + optionalAttendees: ["sam@contoso.com"], + start: start, + end: end, + location: "Home", + subject: "meeting", + resources: ["projector@contoso.com"], + body: "Hello World!" }); -'Office.Recurrence#getAsync:member(1)': +'Office.Mailbox#displayNewMessageForm: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml - Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var recurrence = asyncResult.value; - if (recurrence === null) { - console.log("This is a single appointment."); - } else { - console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); + Office.context.mailbox.displayNewMessageForm({ + toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item + ccRecipients: ["sam@contoso.com"], + subject: "Outlook add-ins are cool!", + htmlBody: 'Hello World!
', + attachments: [ + { + type: "file", + name: "image.png", + url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + isInline: true } - } else { - console.error(asyncResult.error); - } + ] }); -'Office.Recurrence#setAsync:member(1)': +'Office.Mailbox#displayAppointmentFormAsync: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 - - // Important: Can only set the recurrence pattern of an appointment series. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml + var itemId = $("#itemId").val(); - var currentDate = new Date(); - let seriesTimeObject : Office.SeriesTime; + // The async version will return error 9049 if the item is not found. - // Set series start date to tomorrow. + // The async version is only available starting with requirement set 1.9. - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); + Office.context.mailbox.displayAppointmentFormAsync(itemId, + function(asyncResult) { + console.log("Result: " + JSON.stringify(asyncResult)); + }); +'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 - // Set series end date to 1 month from now. + var itemId = $("#itemId").val(); - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); - // Set start time to 1:30 PM. + // The async version will return error 9049 if the item is not found. - seriesTimeObject.setStartTime(13, 30); + // The async version is only available starting with requirement set 1.9. - // Set duration to 30 minutes. + Office.context.mailbox.displayMessageFormAsync(itemId, function + (asyncResult) { + console.log("Result: " + JSON.stringify(asyncResult)); + }); +'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 - seriesTimeObject.setDuration(30); + var start = new Date(); + var end = new Date(); - let pattern : Office.Recurrence = { - seriesTime: seriesTimeObject, - recurrenceType: "weekly", - recurrenceProperties: { interval: 1, days: ["tue", "thu"], firstDayOfWeek: "sun" }, - recurrenceTimeZone: { name: "Pacific Standard Time" } - }; + end.setHours(start.getHours() + 1); - Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { - if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); - return; + // The async version is only available starting with requirement set 1.9, + + // and provides a callback when the new appointment form has been created. + + Office.context.mailbox.displayNewAppointmentFormAsync( + { + requiredAttendees: ["bob@contoso.com"], + optionalAttendees: ["sam@contoso.com"], + start: start, + end: end, + location: "Home", + subject: "meeting", + resources: ["projector@contoso.com"], + body: "Hello World!" + }, + function(asyncResult) { + console.log(JSON.stringify(asyncResult)); } - console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); - }); -'Office.AppointmentRead#recurrence:member': + ); +'Office.Mailbox#displayNewMessageFormAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml - var recurrence = Office.context.mailbox.item.recurrence; + // The async version is only available starting with requirement set 1.9, + // and provides a callback when the new message form has been created. - if (recurrence === undefined) { - console.log("This item is a message but not a meeting request."); - } else if (recurrence === null) { - console.log("This is a single appointment."); - } else { - console.log(JSON.stringify(recurrence)); - } -'Office.MessageRead#recurrence:member': + Office.context.mailbox.displayNewMessageFormAsync( + { + toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item + ccRecipients: ["sam@contoso.com"], + subject: "Outlook add-ins are cool!", + htmlBody: 'Hello World!
', + attachments: [ + { + type: "file", + name: "image.png", + url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + isInline: true + } + ] + }, + function(asyncResult) { + console.log(JSON.stringify(asyncResult)); + } + ); +'Office.Mailbox#convertToRestId:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml - - var recurrence = Office.context.mailbox.item.recurrence; - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - if (recurrence === undefined) { - console.log("This item is a message but not a meeting request."); - } else if (recurrence === null) { - console.log("This is a single appointment."); - } else { - console.log(JSON.stringify(recurrence)); - } -'Office.AppointmentCompose#seriesId:member': + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function + (result) { + var ewsId = Office.context.mailbox.item.itemId; + var token = result.value; + var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + + var 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/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - var seriesId = Office.context.mailbox.item.seriesId; + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); + var ewsId = Office.context.mailbox.item.itemId; - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); - } -'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 + console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - var seriesId = Office.context.mailbox.item.seriesId; + console.log("REST URL: " + Office.context.mailbox.restUrl); - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); - } -'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 + var restId = Office.context.mailbox.convertToRestId(ewsId, + Office.MailboxEnums.RestVersion.v2_0); - var seriesId = Office.context.mailbox.item.seriesId; + console.log("REST item ID: " + restId); - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); - } -'Office.MessageRead#seriesId:member': + var ewsId2 = Office.context.mailbox.convertToEwsId(restId, + Office.MailboxEnums.RestVersion.v2_0); + + console.log("EWS ID (from REST ID): " + ewsId2); +'Office.Mailbox#restUrl:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - - var seriesId = Office.context.mailbox.item.seriesId; - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); - } -'Office.Mailbox#displayAppointmentForm:member(1)': + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function + (result) { + var ewsId = Office.context.mailbox.item.itemId; + var token = result.value; + var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + + var 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/55-display-items/display-existing-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - var itemId = $("#itemId").val(); + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - Office.context.mailbox.displayAppointmentForm(itemId); -'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 + var ewsId = Office.context.mailbox.item.itemId; - var itemId = $("#itemId").val(); + console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - Office.context.mailbox.displayMessageForm(itemId); -'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 - var start = new Date(); + console.log("REST URL: " + Office.context.mailbox.restUrl); - var end = new Date(); + var restId = Office.context.mailbox.convertToRestId(ewsId, + Office.MailboxEnums.RestVersion.v2_0); - end.setHours(start.getHours() + 1); + console.log("REST item ID: " + restId); - Office.context.mailbox.displayNewAppointmentForm({ - requiredAttendees: ["bob@contoso.com"], - optionalAttendees: ["sam@contoso.com"], - start: start, - end: end, - location: "Home", - subject: "meeting", - resources: ["projector@contoso.com"], - body: "Hello World!" - }); -'Office.Mailbox#displayNewMessageForm:member(1)': + var 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/55-display-items/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - Office.context.mailbox.displayNewMessageForm({ - toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item - ccRecipients: ["sam@contoso.com"], - subject: "Outlook add-ins are cool!", - htmlBody: 'Hello World!
', - attachments: [ - { - type: "file", - name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", - isInline: true + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function + (result) { + var ewsId = Office.context.mailbox.item.itemId; + var token = result.value; + var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + + var xhr = new XMLHttpRequest(); + xhr.open('GET', getMessageUrl); + xhr.setRequestHeader("Authorization", "Bearer " + token); + xhr.onload = function (e) { + console.log(this.response); } - ] + xhr.send(); }); -'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 - - Office.context.mailbox.item.displayReplyForm("This is a reply with some - text in italics."); +'Office.Mailbox#ewsUrl:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: 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) { - console.error(`Action failed with message ${result.error.message}`); - } - } - }); -'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 + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - 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 + var ewsId = Office.context.mailbox.item.itemId; - Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: 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) { - console.error(`Action failed with message ${result.error.message}`); - } - } - }); -'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 + console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with - some bold text."); -'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 - Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with - some bold text."); -'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 + console.log("REST URL: " + Office.context.mailbox.restUrl); - var itemId = $("#itemId").val(); + var restId = Office.context.mailbox.convertToRestId(ewsId, + Office.MailboxEnums.RestVersion.v2_0); + console.log("REST item ID: " + restId); - // 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. + var ewsId2 = Office.context.mailbox.convertToEwsId(restId, + Office.MailboxEnums.RestVersion.v2_0); - Office.context.mailbox.displayAppointmentFormAsync(itemId, - function(asyncResult) { - console.log("Result: " + JSON.stringify(asyncResult)); - }); -'Office.Mailbox#displayMessageFormAsync:member(1)': + console.log("EWS ID (from REST ID): " + ewsId2); +'Office.Mailbox#convertToEwsId:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml - - var itemId = $("#itemId").val(); - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - // The async version will return error 9049 if the item is not found. + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - // The async version is only available starting with requirement set 1.9. + var ewsId = Office.context.mailbox.item.itemId; - Office.context.mailbox.displayMessageFormAsync(itemId, function - (asyncResult) { - console.log("Result: " + JSON.stringify(asyncResult)); - }); -'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 + console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - var start = new Date(); - var end = new Date(); + console.log("REST URL: " + Office.context.mailbox.restUrl); - end.setHours(start.getHours() + 1); + var restId = Office.context.mailbox.convertToRestId(ewsId, + Office.MailboxEnums.RestVersion.v2_0); + console.log("REST item ID: " + restId); - // The async version is only available starting with requirement set 1.9, - // and provides a callback when the new appointment form has been created. + var ewsId2 = Office.context.mailbox.convertToEwsId(restId, + Office.MailboxEnums.RestVersion.v2_0); - Office.context.mailbox.displayNewAppointmentFormAsync( - { - requiredAttendees: ["bob@contoso.com"], - optionalAttendees: ["sam@contoso.com"], - start: start, - end: end, - location: "Home", - subject: "meeting", - resources: ["projector@contoso.com"], - body: "Hello World!" - }, - function(asyncResult) { - console.log(JSON.stringify(asyncResult)); - } - ); -'Office.Mailbox#displayNewMessageFormAsync:member(1)': + console.log("EWS ID (from REST ID): " + ewsId2); +'Office.Mailbox#makeEwsRequestAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/get-icaluid-as-attendee.yaml - // The async version is only available starting with requirement set 1.9, + const ewsId = Office.context.mailbox.item.itemId; - // and provides a callback when the new message form has been created. + const request = ` + + + + + AllProperties + + + + + + + `; - Office.context.mailbox.displayNewMessageFormAsync( - { - toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item - ccRecipients: ["sam@contoso.com"], - subject: "Outlook add-ins are cool!", - htmlBody: 'Hello World!
', - attachments: [ - { - type: "file", - name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", - isInline: true - } - ] - }, - function(asyncResult) { - console.log(JSON.stringify(asyncResult)); + Office.context.mailbox.makeEwsRequestAsync(request, (result) => { + if (result.status === Office.AsyncResultStatus.Failed) { + console.error(result.error.message); + return; } - ); -'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 - Office.context.mailbox.item.displayReplyFormAsync("This is a reply with - some text in italics.", function( - asyncResult - ) { - console.log(JSON.stringify(asyncResult)); + console.log(getUID(result.value)); }); - >- // 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, + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/send-message-using-make-ews-request-async.yaml - // and provides a callback when the new appointment form has been created. + var request = ''+ + ' '+ + ' '+ + ' '+ + ' '+ + ' '+ + ' '+ + ' Hello, Outlook!'+ + ' This message was sent from a ScriptLab code sample, used from ' + Office.context.mailbox.diagnostics.hostName + ', version ' + Office.context.mailbox.diagnostics.hostVersion + '!'+ + ' '+ + ' ' + Office.context.mailbox.userProfile.emailAddress + ''+ + ' '+ + ' '+ + ' '+ + ' '+ + ' '+ + ''; - Office.context.mailbox.item.displayReplyFormAsync( - { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] - }, - function(asyncResult) { - console.log(JSON.stringify(asyncResult)); - } - ); -'Office.MessageRead#displayReplyFormAsync:member(1)': + Office.context.mailbox.makeEwsRequestAsync(request, function (result) { + console.log(result); + }); +'Office.Mailbox#getCallbackTokenAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.yaml - Office.context.mailbox.item.displayReplyFormAsync("This is a reply with - some text in italics.", function( - asyncResult - ) { - console.log(JSON.stringify(asyncResult)); + Office.context.mailbox.getCallbackTokenAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Token retrieval failed with message: ${result.error.message}`); + } else { + console.log(result.value); + } }); +'Office.Mailbox#getUserIdentityTokenAsync:member(1)': - >- // 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, + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml - // and 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
", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] - }, - function(asyncResult) { - console.log(JSON.stringify(asyncResult)); - } - ); -'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 - - Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL - with some bold text.", function( - asyncResult - ) { - console.log(JSON.stringify(asyncResult)); + 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.MessageRead#displayReplyAllFormAsync:member(1)': +'Office.MasterCategories#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL - with some bold text.", function( - asyncResult - ) { - console.log(JSON.stringify(asyncResult)); + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Master categories:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories in the master list."); + } + } else { + console.error(asyncResult.error); + } }); -'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': +'Office.MasterCategories#addAsync: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } + var masterCategoriesToAdd = [ + { + displayName: "TestCategory", + color: Office.MailboxEnums.CategoryColor.Preset0 + } + ]; - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); + Office.context.mailbox.masterCategories.addAsync(masterCategoriesToAdd, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Successfully added categories to master list"); + } else { + console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); + } }); -'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': +'Office.MasterCategories#removeAsync: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } + var masterCategoriesToRemove = ["TestCategory"]; - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); + Office.context.mailbox.masterCategories.removeAsync(masterCategoriesToRemove, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Successfully removed categories from master list"); + } else { + console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); + } }); -'Office.MessageCompose#getSharedPropertiesAsync:member(2)': +'Office.MessageCompose#loadCustomPropertiesAsync: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 item from a shared folder."); - return; - } - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log("Loaded following custom properties:"); + customProps = result.value; + var dataKey = Object.keys(customProps)[0]; + var data = customProps[dataKey]; + for (var propertyName in data) + { + var propertyValue = data[propertyName]; + console.log(`${propertyName}: ${propertyValue}`); + } + } + else { + console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + } }); -'Office.MessageRead#getSharedPropertiesAsync:member(2)': +'Office.MessageCompose#getSelectedDataAsync: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 - - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var text = asyncResult.value.data; + var prop = asyncResult.value.sourceProperty; + console.log("Selected text in " + prop + ": " + text); + } else { + console.error(asyncResult.error); + } }); -'Office.AppointmentCompose#getSharedPropertiesAsync:member(1)': +'Office.MessageCompose#setSelectedDataAsync: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) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/events/" + restId; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml - $.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.setSelectedDataAsync("Replaced", + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Selected text has been updated successfully."); + } else { + console.error(asyncResult.error); } }); -'Office.AppointmentRead#getSharedPropertiesAsync:member(1)': +'Office.MessageCompose#close: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; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/events/" + restId; + Office.context.mailbox.item.close(); +'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 - $.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.bcc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgBcc = asyncResult.value; + console.log("Message being blind-copied to:"); + for (var i = 0; i < msgBcc.length; i++) { + console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); } }); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on a message from a shared folder."); - return; - } + var email = $("#emailBcc") + .val() + .toString(); + var emailArray = [email]; - - 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) { - var ewsId = Office.context.mailbox.item.itemId; - var 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.bcc.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting Bcc field."); + } else { + console.error(asyncResult.error); } }); -'Office.MessageRead#getSharedPropertiesAsync:member(1)': +'Office.MessageCompose#cc:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on a message from a shared folder."); - return; - } + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgCc = asyncResult.value; + console.log("Message being copied to:"); + for (var i = 0; i < msgCc.length; i++) { + console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); + } + }); + - >- + // 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 + var email = $("#emailCc") + .val() + .toString(); + var emailArray = [email]; - 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; + Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting Cc field."); + } else { + console.error(asyncResult.error); + } + }); +'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 - // Determine if user has the appropriate permission to do the operation. - if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - let rest_url = - sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/messages/" + restId; + Office.context.mailbox.item.from.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgFrom = asyncResult.value; + console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); + } else { + console.error(asyncResult.error); + } + }); +'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 - $.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.to.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgTo = asyncResult.value; + console.log("Message being sent to:"); + for (var i = 0; i < msgTo.length; i++) { + console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); } }); -'Office.AppointmentRead#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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml - var entities = Office.context.mailbox.item.getEntities(); + var email = $("#emailTo") + .val() + .toString(); + var emailArray = [email]; - var entityTypesFound = 0; + Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting To field."); + } else { + console.error(asyncResult.error); + } + }); +'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 - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } + var id = $("#notificationId").val(); - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } + var id = $("#notificationId").val(); - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } + var details = + { + type: "informationalMessage", + message: "Non-persistent informational notification message with id = " + id, + icon: "icon1", + persistent: false + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } + var id = $("#notificationId").val(); - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } + var details = + { + type: "informationalMessage", + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - if (entityTypesFound == 0) + var id = $("#notificationId").val(); - { - console.log("No entities found on this item."); - } -'Office.MessageRead#getEntities:member(1)': + Office.context.mailbox.item.notificationMessages.replaceAsync( + id, + { + type: "informationalMessage", + message: "Notification message with id = " + id + " has been replaced with an informational message.", + icon: "icon2", + persistent: false + }, + handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var entities = Office.context.mailbox.item.getEntities(); + var id = $("#notificationId").val(); - var entityTypesFound = 0; + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'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 - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } + var attachmentUrl = $("#attachmentUrl").val(); - 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.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.AppointmentRead#getFilteredEntitiesByName:member(1)': + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { "asyncContext" : { var1: 1, var2: true } }, + function(result) { console.log(result); }); +'Office.MessageCompose#addItemAttachmentAsync: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/40-attachments/attachments-compose.yaml - // This API would only work when you click on highlighted physical address - that has the word "Way" in it. + var attachmentItemId = $("#attachmentItemId").val(); - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); -'Office.MessageRead#getFilteredEntitiesByName:member(1)': + Office.context.mailbox.item.addItemAttachmentAsync( + attachmentItemId, + "My attachment", + { "asyncContext" : { var3: 3, var4: false } }, + function(result) { console.log(result); }); +'Office.MessageCompose#addFileAttachmentFromBase64Async: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/40-attachments/attachments-compose.yaml - // This API would only work when you click on highlighted physical address - that has the word "Way" in it. + base64String = + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsSAAALEgHS3X78AAACRUlEQVRYw82XzXHbMBCFP2F8tzsQc8Ixyh0zoiuIXIGdCsxUYKqC0B04FdiuwMoM7mGOOIXqQGoAymXhgSX+itJM9kIRFLAP+3YXD5Pdbscx5oxaAIW8Ztr6l2PWmQwF4IyaieP53qdfAqQ8CwBn1JU4vpWhrbxXQA5MZfynANmcDIAzKgcy4FKGXsVJFf3nLgKyBQptfT4KQMRz2N0fcbxqmRMDWXflx0VPnrdArq0vekQ1Dv0UeHZGNebHhwjU8AzwKM43RyZnbAf58Q6ghudeWd0Aus0+5EcMIIRi3beua0D3Nm39BEAx3i7HTK4DEBJn5YxKOnaRA5+ErpMBWMpzDvx1RuXCcxOISlufAjfC7zgAsqsvUvMAD0ApPaEtGi9AIlUzKgJo60tt/SyKRkzLrAXERluf7W1gOICWaMyB386oooOWsIHvXbSoHuUSFovtHqicUVnH3EJoeT0aQEf5/XBGlc6otIOWBXAtPeZkAIJ9Bt6cUU9tZautX2nrk3MACHYr1ZKProKRtDw4o8pzAPjWo+NtpXTTvoteDDg8noDAcwbcRedAkGdFXyk2GEDcegVAFp2gyVDHjRQ4o6q2smoqtR5Hd+qMqtoALCWUUymr1m43QMZfOaMK4C0SrMsDANJ2E5FNcbdbjHC+ENl+H0myJFbLtaq4Rt8dyPBYRQV1E40nMv9rl7xrOw3DGb+Whcqu3i/OM6CUOWvgRlufNmnLYy4m77uJI7AXtdNcTDrU71LEyv7v01/N/ovL6bmu5/8A1tNWZldH0W4AAAAASUVORK5CYII="; - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); -'Office.AppointmentRead#getRegExMatches:member(1)': + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + base64String, + "logo.png", + { isInline: false }, + function(result) { console.log(result); }); - >- // 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". + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - console.log(Office.context.mailbox.item.getRegExMatches()); -'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 + // Set the signature for the current item with inline image. - // This API would only work when you click on highlighted word "ScriptLab". + var modIcon1Base64 = + "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; - console.log(Office.context.mailbox.item.getRegExMatches()); -'Office.AppointmentRead#getRegExMatchesByName:member(1)': + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + modIcon1Base64, + "myImage.png", + { isInline: true }, + function(result) { + if (result.status == Office.AsyncResultStatus.Succeeded) { + var signature = $("#signature").val() + ""; + console.log(`Setting signature to "${signature}".`); + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); + } + ); + } else { + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + } + } + ); +'Office.MessageCompose#getAttachmentsAsync: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 word "ScriptLab". + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.MessageRead#getRegExMatchesByName:member(1)': + 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 (var i = 0; i < result.value.length; i++) { + var attachment = result.value[i]; + console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); + } + } + else { + console.log("No attachments on this message."); + } + } + }); +'Office.MessageCompose#removeAttachmentAsync: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 word "ScriptLab". + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.AppointmentRead#getSelectedEntities:member(1)': + 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.MessageCompose#getAttachmentContentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - - var entities = Office.context.mailbox.item.getSelectedEntities(); - - var 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++; - } + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } + var item = Office.context.mailbox.item; - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } + var options = {asyncContext: {currentItem: item}}; - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } + item.getAttachmentsAsync(options, callback); - 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++; + function callback(result) { + if (result.value.length > 0) { + for (i = 0 ; i < result.value.length ; i++) { + result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); + } + } } - if (entityTypesFound == 0) - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); + function handleAttachmentsCallback(result) { + // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log(result.value.content); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that are not supported. + } } -'Office.MessageRead#getSelectedEntities:member(1)': +'Office.MessageCompose#categories:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - - var entities = Office.context.mailbox.item.getSelectedEntities(); - - var 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++; - } + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; - } + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Categories assigned to this item:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories assigned to this item."); + } + } else { + console.error(asyncResult.error); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } + // Note: In order for you to successfully add a category, - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } + // it must be in the mailbox categories master list. - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } - if (entityTypesFound == 0) + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var masterCategories = asyncResult.value; + if (masterCategories && masterCategories.length > 0) { + // Grab the first category from the master list. + var categoryToAdd = [masterCategories[0].displayName]; + Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully assigned category '${categoryToAdd}' to item.`); + } else { + console.log("categories.addAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); + } + } else { + console.error(asyncResult.error); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); - } -'Office.AppointmentRead#getSelectedRegExMatches:member(1)': + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories && categories.length > 0) { + // Grab the first category assigned to this item. + var categoryToRemove = [categories[0].displayName]; + Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); + } else { + console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories assigned to this item."); + } + } else { + console.error(asyncResult.error); + } + }); +'Office.MessageCompose#seriesId:member': - >- // 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/50-recurrence/get-series-id.yaml - var matches = Office.context.mailbox.item.getSelectedRegExMatches(); + var seriesId = Office.context.mailbox.item.seriesId; - 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."); + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); } -'Office.MessageRead#getSelectedRegExMatches:member(1)': +'Office.MessageCompose#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - - var matches = Office.context.mailbox.item.getSelectedRegExMatches(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - if (matches) { - console.log(matches); + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on an item from a shared folder."); + return; } - else { - console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); - } -'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) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - var xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); + 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/85-tokens-and-service-calls/ids-and-urls.yaml - - console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - - var ewsId = Office.context.mailbox.item.itemId; - - console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - - - console.log("REST URL: " + Office.context.mailbox.restUrl); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - var restId = Office.context.mailbox.convertToRestId(ewsId, - Office.MailboxEnums.RestVersion.v2_0); + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on a message from a shared folder."); + return; + } - console.log("REST item ID: " + restId); + 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; - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, - Office.MailboxEnums.RestVersion.v2_0); + // Determine if user has the appropriate permission to do the operation. + if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { + var ewsId = Office.context.mailbox.item.itemId; + var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + let rest_url = + sharedProperties.targetRestUrl + "/v2.0/users/" + sharedProperties.targetMailbox + "/messages/" + restId; - console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#restUrl:member': + $.ajax({ + url: rest_url, + dataType: "json", + headers: { Authorization: "Bearer " + result2.asyncContext } + }) + .done(function(response) { + console.log(response); + }) + .fail(function(error) { + console.error(error); + }); + } + } + ); + } + }); +'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/basic-rest-cors.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function - (result) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - var xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); + Office.context.mailbox.item.getItemIdAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`getItemIdAsync failed with message: ${result.error.message}`); + } else { + console.log(result.value); } - xhr.send(); }); +'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- // 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/60-event-based-activation/work-with-client-signatures.yaml - console.log("EWS URL: " + Office.context.mailbox.ewsUrl); + // Get the compose type of the current item (mail only). - var ewsId = Office.context.mailbox.item.itemId; + Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log( + "getComposeTypeAsync succeeded with composeType: " + + asyncResult.value.composeType + + " and coercionType: " + + asyncResult.value.coercionType + ); + } else { + console.error(asyncResult.error); + } + }); +'Office.MessageCompose#disableClientSignatureAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - console.log("EWS item ID: " + Office.context.mailbox.item.itemId); + // Disable the client signature. + Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("disableClientSignatureAsync succeeded"); + } else { + console.error(asyncResult.error); + } + }); +'Office.MessageCompose#isClientSignatureEnabledAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - console.log("REST URL: " + Office.context.mailbox.restUrl); + // Check if the client signature is currently enabled. - var restId = Office.context.mailbox.convertToRestId(ewsId, - Office.MailboxEnums.RestVersion.v2_0); + Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("isClientSignatureEnabledAsync succeeded with result: " + asyncResult.value); + } else { + console.error(asyncResult.error); + } + }); +'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 - console.log("REST item ID: " + restId); + Office.context.mailbox.item.subject.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Subject: ${result.value}`); + }); + - >- + // 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!"; - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, - Office.MailboxEnums.RestVersion.v2_0); + Office.context.mailbox.item.subject.setAsync(subject, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set subject to ${subject}`); + }); +'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 - console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#getCallbackTokenAsync:member(1)': + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); +'Office.MessageCompose#conversationId: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function - (result) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - var xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); + console.log(`Conversation ID: + ${Office.context.mailbox.item.conversationId}`); +'Office.MessageCompose#sessionData:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/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)); + } else { + console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); + } }); -'Office.Mailbox#ewsUrl: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 + + Office.context.mailbox.item.internetHeaders.getAsync( + ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], + function (asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Selected headers: " + JSON.stringify(asyncResult.value)); + } else { + console.log("Error getting selected headers: " + JSON.stringify(asyncResult.error)); + } + } + ); +'Office.MessageRead#loadCustomPropertiesAsync: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 - - console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - - var ewsId = Office.context.mailbox.item.itemId; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - console.log("EWS item ID: " + Office.context.mailbox.item.itemId); + Office.context.mailbox.item.loadCustomPropertiesAsync(function (result) { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log("Loaded following custom properties:"); + customProps = result.value; + var dataKey = Object.keys(customProps)[0]; + var data = customProps[dataKey]; + for (var propertyName in data) + { + var propertyValue = data[propertyName]; + console.log(`${propertyName}: ${propertyValue}`); + } + } + else { + console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + } + }); +'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 + var msgCc = Office.context.mailbox.item.cc; - console.log("REST URL: " + Office.context.mailbox.restUrl); + console.log("Message copied to:"); - var restId = Office.context.mailbox.convertToRestId(ewsId, - Office.MailboxEnums.RestVersion.v2_0); + for (var i = 0; i < msgCc.length; i++) { + console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); + } +'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 - console.log("REST item ID: " + restId); + var msgFrom = Office.context.mailbox.item.from; + console.log("Message received from: " + msgFrom.displayName + " (" + + msgFrom.emailAddress + ")"); +'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 - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, - Office.MailboxEnums.RestVersion.v2_0); + var msgSender = Office.context.mailbox.item.sender; - console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#convertToEwsId:member(1)': + console.log("Sender: " + msgSender.displayName + " (" + + msgSender.emailAddress + ")"); +'Office.MessageRead#to: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/30-recipients-and-attendees/get-to-message-read.yaml - console.log("EWS URL: " + Office.context.mailbox.ewsUrl); + var msgTo = Office.context.mailbox.item.to; - var ewsId = Office.context.mailbox.item.itemId; + console.log("Message sent to:"); - console.log("EWS item ID: " + Office.context.mailbox.item.itemId); + for (var i = 0; i < msgTo.length; i++) { + console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + } +'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 + var id = $("#notificationId").val(); - console.log("REST URL: " + Office.context.mailbox.restUrl); + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var restId = Office.context.mailbox.convertToRestId(ewsId, - Office.MailboxEnums.RestVersion.v2_0); + var id = $("#notificationId").val(); - console.log("REST item ID: " + restId); + var details = + { + type: "informationalMessage", + message: "Non-persistent informational notification message with id = " + id, + icon: "icon1", + persistent: false + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + var id = $("#notificationId").val(); - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, - Office.MailboxEnums.RestVersion.v2_0); + var details = + { + type: "informationalMessage", + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - console.log("EWS ID (from REST ID): " + ewsId2); -'Office.AppointmentCompose#getItemIdAsync:member(2)': + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); - >- // 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/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.getItemIdAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`getItemIdAsync failed with message: ${result.error.message}`); - } else { - console.log(result.value); - } - }); -'Office.MessageCompose#getItemIdAsync:member(2)': + var id = $("#notificationId").val(); + + Office.context.mailbox.item.notificationMessages.replaceAsync( + id, + { + type: "informationalMessage", + message: "Notification message with id = " + id + " has been replaced with an informational message.", + icon: "icon2", + persistent: false + }, + handleResult); - >- // 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/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.getItemIdAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`getItemIdAsync failed with message: ${result.error.message}`); - } else { - console.log(result.value); - } - }); -'Office.Mailbox#makeEwsRequestAsync:member(1)': + var id = $("#notificationId").val(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'Office.MessageRead#getAttachmentContentAsync: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/40-attachments/get-attachment-content.yaml - const ewsId = Office.context.mailbox.item.itemId; + var item = Office.context.mailbox.item; - const request = ` - - - - - AllProperties - - - - - - - `; + var options = {asyncContext: {currentItem: item}}; - Office.context.mailbox.makeEwsRequestAsync(request, (result) => { - if (result.status === Office.AsyncResultStatus.Failed) { - console.error(result.error.message); - return; - } + item.getAttachmentsAsync(options, callback); - console.log(getUID(result.value)); - }); + + function callback(result) { + if (result.value.length > 0) { + for (i = 0 ; i < result.value.length ; i++) { + result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); + } + } + } + + + function handleAttachmentsCallback(result) { + // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log(result.value.content); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that are not supported. + } + } +'Office.MessageRead#attachments:member': - >- // 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/40-attachments/get-attachments-read.yaml - var request = ''+ - ' '+ - ' '+ - ' '+ - ' '+ - ' '+ - ' '+ - ' Hello, Outlook!'+ - ' This message was sent from a ScriptLab code sample, used from ' + Office.context.mailbox.diagnostics.hostName + ', version ' + Office.context.mailbox.diagnostics.hostVersion + '!'+ - ' '+ - ' ' + Office.context.mailbox.userProfile.emailAddress + ''+ - ' '+ - ' '+ - ' '+ - ' '+ - ' '+ - ''; + var attachments = Office.context.mailbox.item.attachments; - Office.context.mailbox.makeEwsRequestAsync(request, function (result) { - console.log(result); - }); -'Office.Mailbox#getCallbackTokenAsync:member(2)': + console.log(attachments); +'Office.MessageRead#categories:member': - >- // 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/45-categories/work-with-categories.yaml - Office.context.mailbox.getCallbackTokenAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Token retrieval failed with message: ${result.error.message}`); + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Categories assigned to this item:"); + console.log(JSON.stringify(categories)); } else { - console.log(result.value); + console.log("There are no categories assigned to this item."); } + } else { + console.error(asyncResult.error); + } }); -'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/45-categories/work-with-categories.yaml - Office.context.mailbox.getUserIdentityTokenAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Token retrieval failed with message: ${result.error.message}`); + // Note: In order for you to successfully add a category, + + // it must be in the mailbox categories master list. + + + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var masterCategories = asyncResult.value; + if (masterCategories && masterCategories.length > 0) { + // Grab the first category from the master list. + var categoryToAdd = [masterCategories[0].displayName]; + Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully assigned category '${categoryToAdd}' to item.`); + } else { + console.log("categories.addAsync call failed with error: " + asyncResult.error.message); + } + }); } else { - console.log(result.value); + console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); } + } else { + console.error(asyncResult.error); + } }); -'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - - // Get the compose type of the current item (mail only). + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log( - "getComposeTypeAsync succeeded with composeType: " + - asyncResult.value.composeType + - " and coercionType: " + - asyncResult.value.coercionType - ); + var categories = asyncResult.value; + if (categories && categories.length > 0) { + // Grab the first category assigned to this item. + var categoryToRemove = [categories[0].displayName]; + Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); + } else { + console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories assigned to this item."); + } } else { console.error(asyncResult.error); } }); -'Office.Body#setSignatureAsync:member(1)': +'Office.MessageRead#recurrence:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml - // Set the signature for the current item with inline image. + var recurrence = Office.context.mailbox.item.recurrence; - var modIcon1Base64 = - "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - modIcon1Base64, - "myImage.png", - { isInline: true }, - function(result) { - if (result.status == Office.AsyncResultStatus.Succeeded) { - var signature = $("#signature").val() + ""; - console.log(`Setting signature to "${signature}".`); - Office.context.mailbox.item.body.setSignatureAsync( - signature, - { coercionType: "html" }, - function(asyncResult) { - console.log(`setSignatureAsync: ${asyncResult.status}`); - } - ); - } else { - console.error(`addFileAttachmentFromBase64Async: ${result.error}`); - } - } - ); + if (recurrence === undefined) { + console.log("This item is a message but not a meeting request."); + } else if (recurrence === null) { + console.log("This is a single appointment."); + } else { + console.log(JSON.stringify(recurrence)); + } +'Office.MessageRead#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - // Set the signature for the current item. + var seriesId = Office.context.mailbox.item.seriesId; - var signature = $("#signature").val(); - console.log(`Setting signature to "${signature}".`); + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); + } +'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 - Office.context.mailbox.item.body.setSignatureAsync(signature, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("setSignatureAsync succeeded"); - } else { - console.error(asyncResult.error); + 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: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: 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) { + console.error(`Action failed with message ${result.error.message}`); + } } }); -'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': +'Office.MessageRead#displayReplyAllForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml - // Disable the client signature. + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with + some bold text."); +'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 - Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("disableClientSignatureAsync succeeded"); - } else { - console.error(asyncResult.error); - } + Office.context.mailbox.item.displayReplyFormAsync("This is a reply with + some text in italics.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); }); -'Office.MessageCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml - // Disable the client signature. + // The async version is only available starting with requirement set 1.9, - Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("disableClientSignatureAsync succeeded"); - } else { - console.error(asyncResult.error); + // and 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
", + attachments: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } + ] + }, + function(asyncResult) { + console.log(JSON.stringify(asyncResult)); } + ); +'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 + + Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL + with some bold text.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); }); -'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': +'Office.MessageRead#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - // Check if the client signature is currently enabled. + if (!Office.context.mailbox.item.getSharedPropertiesAsync) { + console.error("Try this sample on an item from a shared folder."); + return; + } - Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("isClientSignatureEnabledAsync succeeded with result: " + asyncResult.value); - } else { - console.error(asyncResult.error); + + 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) { + var ewsId = Office.context.mailbox.item.itemId; + var 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.MessageCompose#isClientSignatureEnabledAsync:member(1)': +'Office.MessageRead#getEntities:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - // Check if the client signature is currently enabled. + var entities = Office.context.mailbox.item.getEntities(); - Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("isClientSignatureEnabledAsync succeeded with result: " + asyncResult.value); - } else { - console.error(asyncResult.error); - } - }); -'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 + var entityTypesFound = 0; - console.log(`Subject: ${Office.context.mailbox.item.subject}`); -'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 + if (entities.addresses.length > 0) { + console.warn("physical addresses: "); + console.log(entities.addresses); + entityTypesFound++; + } - console.log(`Subject: ${Office.context.mailbox.item.subject}`); -'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 + if (entities.contacts.length > 0) { + console.warn("contacts: "); + entities.contacts.forEach(function (contact) { console.log(contact.personName); }) + entityTypesFound++; + } - Office.context.mailbox.item.subject.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Subject: ${result.value}`); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + if (entities.emailAddresses.length > 0) { + console.warn("email addresses: "); + console.log(entities.emailAddresses); + entityTypesFound++; + } - let subject = "Hello World!"; + if (entities.meetingSuggestions.length > 0) { + console.warn("meetings suggestions: "); + entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) + entityTypesFound++; + } - Office.context.mailbox.item.subject.setAsync(subject, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Successfully set subject to ${subject}`); - }); -'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 + if (entities.phoneNumbers.length > 0) { + console.warn("phone numbers: "); + entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) + entityTypesFound++; + } - Office.context.mailbox.item.subject.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Subject: ${result.value}`); - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + if (entities.taskSuggestions.length > 0) { + console.warn("task suggestions: "); + entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) + entityTypesFound++; + } - let subject = "Hello World!"; + if (entities.urls.length > 0) { + console.warn("URLs: "); + console.log(entities.urls); + entityTypesFound++; + } - Office.context.mailbox.item.subject.setAsync(subject, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Successfully set subject to ${subject}`); - }); -'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 + if (entityTypesFound == 0) - console.log(`Internet message ID: - ${Office.context.mailbox.item.internetMessageId}`); -'Office.AppointmentRead#itemClass:member': + { + 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/90-other-item-apis/get-item-class-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); -'Office.MessageRead#itemClass:member': + 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/90-other-item-apis/get-item-class-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); -'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 + // This API would only work when you click on highlighted physical address + that has the word "Way" in it. - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); -'Office.AppointmentRead#itemType:member': + 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/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); -'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 + // This API would only work when you click on highlighted word "ScriptLab". - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); -'Office.MessageRead#itemType:member': + 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/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); -'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 + // This API would only work when you click on highlighted word "ScriptLab". - console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); -'Office.MessageRead#start:member': + 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/90-other-item-apis/get-start-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); -'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 + var entities = Office.context.mailbox.item.getSelectedEntities(); - Office.context.mailbox.item.start.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Appointment starts: ${result.value}`); - }); - - >- - // 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 + var entityTypesFound = 0; - var start = new Date(); // Represents current date and time. + if (entities.addresses.length > 0) { + console.warn("physical addresses: "); + console.log(entities.addresses); + entityTypesFound++; + } - start.setDate(start.getDate() + 2); // Add 2 days to current date. + if (entities.contacts.length > 0) { + console.warn("contacts: "); + entities.contacts.forEach(function (contact) { console.log(contact.personName); }) + entityTypesFound++; + } - Office.context.mailbox.item.start.setAsync(start, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Successfully set start date and time to ${start}`); - }); -'Office.Time#getAsync:member(2)': + 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/90-other-item-apis/get-set-start-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - Office.context.mailbox.item.start.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Appointment starts: ${result.value}`); - }); -'Office.Time#setAsync:member(1)': + var 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."); + } +'Office.MessageRead#subject: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 - - var start = new Date(); // Represents current date and time. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml - start.setDate(start.getDate() + 2); // Add 2 days to current date. + console.log(`Subject: ${Office.context.mailbox.item.subject}`); +'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 - Office.context.mailbox.item.start.setAsync(start, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Successfully set start date and time to ${start}`); - }); + console.log(`Internet message ID: + ${Office.context.mailbox.item.internetMessageId}`); +'Office.MessageRead#itemClass: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.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}`); - return; - } + 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 - var end = result.value; // Set end to current start date and time. - end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. - Office.context.mailbox.item.end.setAsync(end, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Set end date failed with message ${result.error.message}`); - return; - } - console.log(`Successfully set end date and time to ${end}`); - }); - }); -'Office.AppointmentRead#normalizedSubject:member': + console.log(`Item type: ${Office.context.mailbox.item.itemType}`); +'Office.MessageRead#start: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml - console.log(`Normalized subject: - ${Office.context.mailbox.item.normalizedSubject}`); + console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); 'Office.MessageRead#normalizedSubject:member': - >- // Link to full sample: @@ -10047,13 +10195,6 @@ console.log(`Normalized subject: ${Office.context.mailbox.item.normalizedSubject}`); -'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 - - console.log(`Conversation ID: - ${Office.context.mailbox.item.conversationId}`); 'Office.MessageRead#conversationId:member': - >- // Link to full sample: @@ -10061,13 +10202,6 @@ console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); -'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 - - console.log(`Creation date and time: - ${Office.context.mailbox.item.dateTimeCreated}`); 'Office.MessageRead#dateTimeCreated:member': - >- // Link to full sample: @@ -10075,13 +10209,6 @@ console.log(`Creation date and time: ${Office.context.mailbox.item.dateTimeCreated}`); -'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 - - console.log(`Date and time item last modified: - ${Office.context.mailbox.item.dateTimeModified}`); 'Office.MessageRead#dateTimeModified:member': - >- // Link to full sample: @@ -10089,350 +10216,445 @@ console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); -'Office.AppointmentRead#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#end: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-end-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml - console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); -'Office.AppointmentCompose#end:member': + console.log(`Appointment location: + ${Office.context.mailbox.item.location}`); +'Office.MessageRead#getAllInternetHeadersAsync:member(1)': - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml - Office.context.mailbox.item.end.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + 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)); + } else { + console.log("Didn't receive header with sender's preferred fruit"); + } + if (asyncResult.value.match(/x-preferred-vegetable:.*/gim)) { + console.log( + "Sender's preferred vegetable: " + asyncResult.value.match(/x-preferred-vegetable:.*/gim)[0].slice(23) + ); + } else { + console.log("Didn't receive header with sender's preferred vegetable"); + } + } else { + console.log("Error getting internet headers: " + JSON.stringify(asyncResult.error)); } - console.log(`Appointment ends: ${result.value}`); }); +'Office.NotificationMessages#addAsync:member(1)': - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.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}`); - return; - } + var id = $("#notificationId").val(); - var end = result.value; // Set end to current start date and time. - end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. - Office.context.mailbox.item.end.setAsync(end, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Set end date failed with message ${result.error.message}`); - return; - } - console.log(`Successfully set end date and time to ${end}`); - }); - }); -'Office.AppointmentRead#location:member': + var details = + { + type: "progressIndicator", + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - console.log(`Appointment location: - ${Office.context.mailbox.item.location}`); -'Office.MessageRead#location:member': + var id = $("#notificationId").val(); + + var details = + { + type: "informationalMessage", + message: "Non-persistent informational notification message with id = " + id, + icon: "icon1", + persistent: false + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-location-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - console.log(`Appointment location: - ${Office.context.mailbox.item.location}`); -'Office.AppointmentCompose#location:member': + var id = $("#notificationId").val(); + + var details = + { + type: "informationalMessage", + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - Office.context.mailbox.item.location.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + var id = $("#notificationId").val(); + + var details = + { + type: "errorMessage", + message: "Error notification message with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); +'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 + + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); +'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 + + var id = $("#notificationId").val(); + + Office.context.mailbox.item.notificationMessages.replaceAsync( + id, + { + type: "informationalMessage", + message: "Notification message with id = " + id + " has been replaced with an informational message.", + icon: "icon2", + persistent: false + }, + handleResult); +'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 + + var id = $("#notificationId").val(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'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 + + Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var apptOrganizer = asyncResult.value; + console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); + } else { + console.error(asyncResult.error); } - console.log(`Appointment location: ${result.value}`); }); +'Office.Recipients#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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml - var location = "my office"; + Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgBcc = asyncResult.value; + console.log("Message being blind-copied to:"); + for (var i = 0; i < msgBcc.length; i++) { + console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); + } + }); + - >- + // 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.location.setAsync(location, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgCc = asyncResult.value; + console.log("Message being copied to:"); + for (var i = 0; i < msgCc.length; i++) { + console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); } - console.log(`Successfully set location to ${location}`); }); -'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 + 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.location.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var apptOptionalAttendees = asyncResult.value; + for (var i = 0; i < apptOptionalAttendees.length; i++) { + console.log( + "Optional attendees: " + + apptOptionalAttendees[i].displayName + + " (" + + apptOptionalAttendees[i].emailAddress + + ") - response: " + + apptOptionalAttendees[i].appointmentResponse + ); + } + } else { + console.error(asyncResult.error); } - console.log(`Appointment location: ${result.value}`); }); -'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 - - var location = "my office"; + 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.location.setAsync(location, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var apptRequiredAttendees = asyncResult.value; + for (var i = 0; i < apptRequiredAttendees.length; i++) { + console.log( + "Required attendees: " + + apptRequiredAttendees[i].displayName + + " (" + + apptRequiredAttendees[i].emailAddress + + ") - response: " + + apptRequiredAttendees[i].appointmentResponse + ); + } + } else { + console.error(asyncResult.error); } - console.log(`Successfully set location to ${location}`); }); -'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 + 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.enhancedLocation.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to get locations. Error message: ${result.error.message}`); - return; - } - var places = result.value; - if (places && places.length > 0) { - result.value.forEach(function(place) { - console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); - if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { - console.log("Email address: " + place.emailAddress); - } - }); + Office.context.mailbox.item.to.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var msgTo = asyncResult.value; + console.log("Message being sent to:"); + for (var i = 0; i < msgTo.length; i++) { + console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + } } else { - console.log("There are no locations."); + console.error(asyncResult.error); } }); +'Office.Recipients#setAsync:member(2)': - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-bcc-message-compose.yaml - var locations = [ - { - id: "Contoso", - type: Office.MailboxEnums.LocationType.Custom - }, - { - id: "room500@test.com", - type: Office.MailboxEnums.LocationType.Room - } - ]; + var email = $("#emailBcc") + .val() + .toString(); + var emailArray = [email]; - Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => - { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully added locations ${JSON.stringify(locations)}`); + Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting Bcc field."); } else { - console.error(`Failed to add locations. Error message: ${result.error.message}`); + console.error(asyncResult.error); } }); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml - var locations = [ - { - id: "Contoso", - type: Office.MailboxEnums.LocationType.Custom - }, - { - id: "room500@test.com", - type: Office.MailboxEnums.LocationType.Room - } - ]; + var email = $("#emailCc") + .val() + .toString(); + var emailArray = [email]; - Office.context.mailbox.item.enhancedLocation.removeAsync(locations, (result) - => { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully removed locations ${JSON.stringify(locations)}`); + Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting Cc field."); } else { - console.error(`Failed to remove locations. Error message: ${result.error.message}`); + console.error(asyncResult.error); } }); -'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 + 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.enhancedLocation.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to get locations. Error message: ${result.error.message}`); - return; - } - var places = result.value; - if (places && places.length > 0) { - result.value.forEach(function(place) { - console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); - if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { - console.log("Email address: " + place.emailAddress); - } - }); + var email = $("#emailOptional") + .val() + .toString(); + var emailArray = [email]; + + Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting optional attendees field."); } else { - console.log("There are no locations."); + console.error(asyncResult.error); } }); -'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 + 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.enhancedLocation.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to get locations. Error message: ${result.error.message}`); - return; - } - var places = result.value; - if (places && places.length > 0) { - result.value.forEach(function(place) { - console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); - if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { - console.log("Email address: " + place.emailAddress); - } - }); + var email = $("#emailRequired") + .val() + .toString(); + var emailArray = [email]; + + Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting required attendees field."); } else { - console.log("There are no locations."); + console.error(asyncResult.error); } }); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-to-message-compose.yaml - var locations = [ - { - id: "Contoso", - type: Office.MailboxEnums.LocationType.Custom - }, - { - id: "room500@test.com", - type: Office.MailboxEnums.LocationType.Room + var email = $("#emailTo") + .val() + .toString(); + var emailArray = [email]; + + Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting To field."); + } else { + console.error(asyncResult.error); } - ]; + }); +'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 - Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => - { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully added locations ${JSON.stringify(locations)}`); + Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + var recurrence = asyncResult.value; + if (recurrence === null) { + console.log("This is a single appointment."); + } else { + console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); + } } else { - console.error(`Failed to add locations. Error message: ${result.error.message}`); + console.error(asyncResult.error); } }); -'Office.EnhancedLocation#removeAsync:member(1)': +'Office.Recurrence#setAsync: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 + 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. + + + var currentDate = new Date(); + + let seriesTimeObject : Office.SeriesTime; + + // Set series start date to tomorrow. + + seriesTimeObject.setStartDate( + currentDate.getFullYear(), + currentDate.getMonth(), + currentDate.getDay() + 1 + ); + + // Set series end date to 1 month from now. + + seriesTimeObject.setEndDate( + currentDate.getFullYear(), + currentDate.getMonth() + 1, + currentDate.getDay() + ); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. - var locations = [ - { - id: "Contoso", - type: Office.MailboxEnums.LocationType.Custom - }, - { - id: "room500@test.com", - type: Office.MailboxEnums.LocationType.Room - } - ]; + seriesTimeObject.setDuration(30); - Office.context.mailbox.item.enhancedLocation.removeAsync(locations, (result) - => { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully removed locations ${JSON.stringify(locations)}`); - } else { - console.error(`Failed to remove locations. Error message: ${result.error.message}`); - } - }); -'Office.AppointmentCompose#isAllDayEvent:member': - - >- - // 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); - } else { - console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); + let pattern : Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: "weekly", + recurrenceProperties: { interval: 1, days: ["tue", "thu"], firstDayOfWeek: "sun" }, + recurrenceTimeZone: { name: "Pacific Standard Time" } + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); +'Office.RestVersion: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/85-tokens-and-service-calls/basic-rest-cors.yaml - Office.context.mailbox.item.isAllDayEvent.setAsync(true, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log("Failed to set all-day event: " + JSON.stringify(asyncResult.error)); - } else { - console.log("Appointment set to all-day event."); - } + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function + (result) { + var ewsId = Office.context.mailbox.item.itemId; + var token = result.value; + var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + + var xhr = new XMLHttpRequest(); + xhr.open('GET', getMessageUrl); + xhr.setRequestHeader("Authorization", "Bearer " + token); + xhr.onload = function (e) { + console.log(this.response); + } + xhr.send(); }); -'Office.IsAllDayEvent#getAsync:member(2)': +'Office.RoamingSettings#get: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/10-roaming-settings/roaming-settings.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); - } else { - console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); - } - }); -'Office.IsAllDayEvent#setAsync:member(1)': + var settingName = $("#settingName").val(); + + var settingValue = Office.context.roamingSettings.get(settingName); + + $("#settingValue").val(settingValue); + + console.log(`The value of setting "${settingName}" is "${settingValue}".`); +'Office.RoamingSettings#set: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/10-roaming-settings/roaming-settings.yaml - Office.context.mailbox.item.isAllDayEvent.setAsync(true, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log("Failed to set all-day event: " + JSON.stringify(asyncResult.error)); - } else { - console.log("Appointment set to all-day event."); - } - }); -'Office.AppointmentCompose#sensitivity:member': + var settingName = $("#settingName").val(); + + var settingValue = $("#settingValue").val(); + + Office.context.roamingSettings.set(settingName, settingValue); + + console.log(`Setting "${settingName}" set to value "${settingValue}".`); +'Office.RoamingSettings#saveAsync: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/10-roaming-settings/roaming-settings.yaml - Office.context.mailbox.item.sensitivity.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Sensitivity: " + asyncResult.value); + // Save settings in the mailbox to make it available in future sessions. + + Office.context.roamingSettings.saveAsync(function(result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); } else { - console.log("Failed to get sensitivity: " + JSON.stringify(asyncResult.error)); + console.log(`Settings saved with status: ${result.status}`); } }); - - >- - // 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) { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); - } else { - console.log("Successfully set appointment sensitivity."); - } - } - ); 'Office.Sensitivity#getAsync:member(2)': - >- // Link to full sample: @@ -10460,30 +10682,6 @@ } } ); -'Office.AppointmentCompose#sessionData:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/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)); - } else { - console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); - } - }); -'Office.MessageCompose#sessionData:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/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)); - } else { - console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); - } - }); 'Office.SessionData#setAsync:member(1)': - >- // Link to full sample: @@ -10552,92 +10750,54 @@ console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.MessageRead#getAllInternetHeadersAsync:member(1)': +'Office.Time#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/70-mime-headers/get-internet-headers-message-read.yaml + 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.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)); - } else { - console.log("Didn't receive header with sender's preferred fruit"); - } - if (asyncResult.value.match(/x-preferred-vegetable:.*/gim)) { - console.log( - "Sender's preferred vegetable: " + asyncResult.value.match(/x-preferred-vegetable:.*/gim)[0].slice(23) - ); - } else { - console.log("Didn't receive header with sender's preferred vegetable"); - } - } else { - console.log("Error getting internet headers: " + JSON.stringify(asyncResult.error)); + Office.context.mailbox.item.start.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; } + console.log(`Appointment starts: ${result.value}`); }); -'Office.MessageCompose#internetHeaders:member': +'Office.Time#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 + 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.internetHeaders.getAsync( - ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], - function (asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Selected headers: " + JSON.stringify(asyncResult.value)); - } else { - console.log("Error getting selected headers: " + JSON.stringify(asyncResult.error)); - } - } - ); -'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 + var start = new Date(); // Represents current date and time. - Office.context.mailbox.item.internetHeaders.getAsync( - ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], - function (asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Selected headers: " + JSON.stringify(asyncResult.value)); - } else { - console.log("Error getting selected headers: " + JSON.stringify(asyncResult.error)); - } - } - ); -'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 + start.setDate(start.getDate() + 2); // Add 2 days to current date. - Office.context.mailbox.item.internetHeaders.removeAsync( - ["x-best-vegetable", "x-nonexistent-header"], - function (asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Successfully removed selected headers"); - } else { - console.log("Error removing selected headers: " + JSON.stringify(asyncResult.error)); - } + Office.context.mailbox.item.start.setAsync(start, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; } - ); -'Office.InternetHeaders#setAsync:member(1)': + console.log(`Successfully set start date and time to ${start}`); + }); - >- // 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 + 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.internetHeaders.setAsync( - { "x-preferred-fruit": "orange", "x-preferred-vegetable": "broccoli", "x-best-vegetable": "spinach" }, - function (asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Successfully set headers"); - } else { - console.log("Error setting headers: " + JSON.stringify(asyncResult.error)); - } + Office.context.mailbox.item.start.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Get start date failed with message ${result.error.message}`); + return; } - ); + var end = result.value; // Set end to current start date and time. + end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. + Office.context.mailbox.item.end.setAsync(end, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Set end date failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set end date and time to ${end}`); + }); + }); 'PowerPoint.Presentation#insertSlidesFromBase64:member(1)': - >- // Link to full sample: From fdc4086b05de4157337fa2392f5bddbddcee5c34 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 21 Jul 2022 13:06:51 -0700 Subject: [PATCH 093/336] [all hosts] Clean up usage of function and method (#667) --- samples/excel/10-chart/chart-data-source.yaml | 2 +- samples/excel/10-chart/chart-data-table.yaml | 9 +- .../excel/12-comment/comment-mentions.yaml | 2 +- .../conditional-formatting-basic.yaml | 4 +- .../events-comment-event-handler.yaml | 12 +- ...nts-workbook-and-worksheet-collection.yaml | 2 +- .../events-worksheet-protection.yaml | 8 +- samples/excel/30-events/events-worksheet.yaml | 7 +- .../38-pivottable/pivottable-refresh.yaml | 6 +- .../38-pivottable/pivottable-source-data.yaml | 3 +- samples/excel/42-range/precedents.yaml | 2 +- samples/excel/42-range/range-dependents.yaml | 11 +- .../42-range/range-direct-dependents.yaml | 2 +- .../excel/42-range/range-relationships.yaml | 6 +- .../create-get-change-delete-settings.yaml | 2 +- .../54-worksheet/worksheet-auto-filter.yaml | 19 +- .../data-types-custom-functions.yaml | 6 +- .../data-types-entity-attribution.yaml | 7 +- .../data-types-entity-values.yaml | 7 +- .../data-types-error-values.yaml | 3 +- .../data-types-formatted-number.yaml | 15 +- .../data-types-references.yaml | 19 +- .../85-preview-apis/data-types-web-image.yaml | 9 +- samples/powerpoint/shapes/shapes.yaml | 38 +-- .../slide-management/insert-slides.yaml | 2 +- samples/powerpoint/tags/tags.yaml | 2 +- snippet-extractor-output/snippets.yaml | 252 +++++++++++------- 27 files changed, 244 insertions(+), 213 deletions(-) diff --git a/samples/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index e0c8b249b..cb0b65ca1 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -11,8 +11,8 @@ script: $("#log-chart-series-source").click(() => tryCatch(logChartSeriesSource)); async function logChartSeriesSource() { + // This function retrieves the data source information of a chart series in the Sample worksheet. await Excel.run(async (context) => { - // This method retrieves the data source information of a chart series in the Sample worksheet. const sheet = context.workbook.worksheets.getItem("Sample"); // Get the first chart series from the first chart on the worksheet. diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml index fc07e1b6a..9d0c5b04d 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -13,8 +13,9 @@ script: $("#format-chart-data-table").click(() => tryCatch(formatChartDataTable)); async function createColumnClusteredChart() { + // This function creates a clustered column chart based on data from a table on + // this worksheet and then sets name, position, and format for the chart. await Excel.run(async (context) => { - // This method creates a clustered column chart based on data from a table on this worksheet and then sets name, position, and format for the chart. const sheet = context.workbook.worksheets.getItem("Sample"); // Create a clustered column chart with data from "SalesTable". @@ -38,9 +39,8 @@ script: } async function addChartDataTable() { + // This function adds a data table to a chart that already exists on the worksheet. await Excel.run(async (context) => { - // This method adds a data table to a chart that already exists on the worksheet. - // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -53,9 +53,8 @@ script: } async function formatChartDataTable() { + // This function adjusts the display and format of a chart data table that already exists on the worksheet. await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. - // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); diff --git a/samples/excel/12-comment/comment-mentions.yaml b/samples/excel/12-comment/comment-mentions.yaml index d52360be8..22b67a2ee 100644 --- a/samples/excel/12-comment/comment-mentions.yaml +++ b/samples/excel/12-comment/comment-mentions.yaml @@ -72,7 +72,7 @@ template: Mention someone in a comment

-

Change the email and name fields in the addCommentWithMention method to test the notification functionality.

+

Change the email and name fields in the addCommentWithMention function to test the notification functionality.

language: html style: diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 365a9963e..fbbaf5dff 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -79,8 +79,8 @@ script: With a "three*" icon set style, such as "threeTriangles", the third element in the criteria array (criteria[2]) defines the "top" icon; e.g., a green triangle. The second (criteria[1]) defines the "middle" - icon, The first (criteria[0]) defines the "low" icon, but it - can often be left empty as this method does below, because every + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every cell that does not match the other two criteria always gets the low icon. */ diff --git a/samples/excel/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 7ba4727d1..76f7a5223 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -29,9 +29,9 @@ script: } 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. await Excel.run(async (context) => { - // Retrieve the added comment using the comment ID. - // Note: This method assumes only a single comment is added at a time. const addedComment = context.workbook.comments.getItem(event.commentDetails[0].commentId); // Load the added comment's data. @@ -49,9 +49,9 @@ script: } 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. await Excel.run(async (context) => { - // Retrieve the changed comment using the comment ID. - // Note: This method assumes only a single comment is changed at a time. const changedComment = context.workbook.comments.getItem(event.commentDetails[0].commentId); // Load the changed comment's data. @@ -69,9 +69,9 @@ script: } 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. await Excel.run(async (context) => { - // Print out the deleted comment's ID. - // Note: This method assumes only a single comment is deleted at a time. console.log(`A comment was deleted:`); console.log(` ID: ${event.commentDetails[0].commentId}`); }); 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 fa446f95d..1e2661035 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -142,7 +142,7 @@ script: async function changeSetting() { - // The settings.add function is also how you change a + // The settings.add method is also how you change a // setting. There is no settings.setItem or setting.set // method. For example: // 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 11472fb12..509e0a554 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -11,9 +11,8 @@ script: $("#change-protection").click(() => tryCatch(changeProtection)); async function registerEvent() { + // This function registers an event handler for the onProtectionChanged event of a worksheet. await Excel.run(async (context) => { - // This method registers an event handler for the onProtectionChanged event of a worksheet. - // Set "Sample" as the active worksheet. context.workbook.worksheets.getItemOrNullObject("Sample").delete(); const sheet = context.workbook.worksheets.add("Sample"); @@ -27,8 +26,9 @@ script: } async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { + // This function is an event handler that returns the protection status of a worksheet + // and information about the changed worksheet. await Excel.run(async (context) => { - // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. const protectionStatus = event.isProtected; const worksheetId = event.worksheetId; const source = event.source; @@ -39,8 +39,8 @@ script: } async function changeProtection() { + // This function toggles the protection status of a worksheet between "protected" and "unprotected". await Excel.run(async (context) => { - // This method toggles the protection status of a worksheet between "protected" and "unprotected". const sheet = context.workbook.worksheets.getItem("Sample"); sheet.activate(); diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index c20010ad4..682015fe7 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -99,8 +99,8 @@ script: } async function deleteData() { + // This function deletes data from a range and sets the delete shift direction to "up". await Excel.run(async (context) => { - // This method deletes data from a range and sets the delete shift direction to "up". const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("A5:F5"); range.delete(Excel.DeleteShiftDirection.up); @@ -108,10 +108,9 @@ script: } 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. await Excel.run(async (context) => { - // This method is an event handler that returns the address, trigger source, - // and insert or delete shift directions of the change. - // Return the address where change occurred. console.log(`Handler for worksheet onChanged event has been triggered.`); console.log(` Data changed address: ` + event.address); diff --git a/samples/excel/38-pivottable/pivottable-refresh.yaml b/samples/excel/38-pivottable/pivottable-refresh.yaml index b42a993ca..87b0a6d01 100644 --- a/samples/excel/38-pivottable/pivottable-refresh.yaml +++ b/samples/excel/38-pivottable/pivottable-refresh.yaml @@ -12,9 +12,9 @@ script: $("#add-table-row").click(() => tryCatch(addTableRow)); async function refreshPivotTable() { + // This function refreshes the "Farm Sales" PivotTable, + // which updates the PivotTable with changes made to the source table. await Excel.run(async (context) => { - // This method refreshes the "Farm Sales" PivotTable, - // which updates the PivotTable with changes made to the source table. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); pivotTable.refresh(); await context.sync(); @@ -22,8 +22,8 @@ script: } async function addTableRow() { + // This function adds a row to the PivotTable's source table. await Excel.run(async (context) => { - // This method adds a row to the PivotTable's source table. const dataTable = context.workbook.tables.getItem("DataTable"); dataTable.rows.add(null, [["G Farms", "Mango", "Organic", 200, 1000]]); await context.sync(); diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index 32ea1879a..e0ceb5821 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -11,9 +11,8 @@ script: $("#get-pivottable-data-source").click(() => tryCatch(getPivotTableDataSource)); async function getPivotTableDataSource() { + // This function logs information about the data source of a PivotTable. await Excel.run(async (context) => { - // This method logs information about the data source of a PivotTable. - const worksheet = context.workbook.worksheets.getItem("TotalPivot"); const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index de1562999..6dc28b529 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -100,7 +100,7 @@ script: }); } - /** Create two sample tables with functions that span the tables. */ + /** Create two sample tables with methods that span the tables. */ async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample2019Data").delete(); diff --git a/samples/excel/42-range/range-dependents.yaml b/samples/excel/42-range/range-dependents.yaml index 10ab3a0c4..b79542f62 100644 --- a/samples/excel/42-range/range-dependents.yaml +++ b/samples/excel/42-range/range-dependents.yaml @@ -13,9 +13,8 @@ script: $("#clear-highlighting").click(() => tryCatch(clearFormatting)); async function selectD3() { + // This function selects a cell with dependents across both worksheets. await Excel.run(async (context) => { - // This method selects a cell with dependents across both worksheets. - // Activate the sample worksheet. const sheet = context.workbook.worksheets.getItem("Sample2019Data"); sheet.activate(); @@ -28,10 +27,9 @@ script: } async function getAllDependents() { + // 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) => { - // This method highlights all the dependent cells of the active cell. - // Dependent cells contain formulas that refer to other cells. - // Get addresses of the active cell's dependent cells. const range = context.workbook.getActiveCell(); const dependents = range.getDependents(); @@ -52,9 +50,8 @@ script: } async function clearFormatting() { + // This function removes highlighting from dependent cells. await Excel.run(async (context) => { - // This method removes highlighting from dependent cells. - const sheet1 = context.workbook.worksheets.getItem("Sample2019Data"); const range1 = sheet1.getRange("B3:E5"); range1.format.fill.clear(); diff --git a/samples/excel/42-range/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml index 0fc62c93d..27f0ce290 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -61,7 +61,7 @@ script: }); } - /** Create two sample tables on different worksheets with functions that span the tables. */ + /** Create two sample tables on different worksheets with methods that span the tables. */ async function setup() { await Excel.run(async (context) => { context.workbook.worksheets.getItemOrNullObject("Sample2019Data").delete(); diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index bb5b531bc..63156897b 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -99,7 +99,7 @@ script: await context.sync(); if (asianContestRange.isNullObject) { - // See the declaration of this method for how to + // See the declaration of this function for how to // test this code path. reportMissingData("Asian"); } else { @@ -113,7 +113,7 @@ script: } if (europeanContestRange.isNullObject) { - // See the declaration of this method for how to + // See the declaration of this function for how to // test this code path. reportMissingData("European"); } else { @@ -147,7 +147,7 @@ script: } function reportMissingData(continent: string) { - // To test this method, + // To test this function, // (1) Press "Create Table" // (2) Delete data from the rows for one continent, // INCLUDING THE "Sales Team" COLUMN VALUES. 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 bb393f18b..6c20d2a05 100644 --- a/samples/excel/50-workbook/create-get-change-delete-settings.yaml +++ b/samples/excel/50-workbook/create-get-change-delete-settings.yaml @@ -48,7 +48,7 @@ script: await Excel.run(async (context) => { const settings = context.workbook.settings; - // The settings.add function is also how you change a + // The settings.add method is also how you change a // setting. There is no settings.setItem or setting.set // method. settings.add("NeedsReview", false); diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index 9c928d46c..b172d97fe 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -16,10 +16,9 @@ script: $("#remove-all-auto-filters").click(() => tryCatch(removeAllAutoFilters)); async function addPercentAutoFilter() { + // 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) => { - // This method adds a percentage AutoFilter to the active worksheet - // and applies the filter to a column of the used range. - // Retrieve the active worksheet and the used range on that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); const farmData = sheet.getUsedRange(); @@ -35,10 +34,9 @@ script: } async function addCustomAutoFilter() { + // This function adds a custom AutoFilter to the active worksheet + // and applies the filter to a column of the used range. await Excel.run(async (context) => { - // This method adds a custom AutoFilter to the active worksheet - // and applies the filter to a column of the used range. - // Retrieve the active worksheet and the used range on that worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); const farmData = sheet.getUsedRange(); @@ -69,9 +67,8 @@ script: } async function refreshAutoFilter() { + // This function refreshes the AutoFilter to ensure that changes are captured. await Excel.run(async (context) => { - // This method refreshes the AutoFilter to ensure that changes are captured. - // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -82,9 +79,8 @@ script: } async function clearSingleAutoFilter() { + // This function clears the AutoFilter setting from one column. await Excel.run(async (context) => { - // This method clears the AutoFilter setting from one column. - // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -95,9 +91,8 @@ script: } async function removeAllAutoFilters() { + // This function removes all AutoFilters from the active worksheet. await Excel.run(async (context) => { - // This method removes all AutoFilters from the active worksheet. - // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); diff --git a/samples/excel/85-preview-apis/data-types-custom-functions.yaml b/samples/excel/85-preview-apis/data-types-custom-functions.yaml index 4ee30115c..d6aa5a5c8 100644 --- a/samples/excel/85-preview-apis/data-types-custom-functions.yaml +++ b/samples/excel/85-preview-apis/data-types-custom-functions.yaml @@ -15,7 +15,7 @@ script: * @return {Promise} Search results as one or more data type entity values. */ async function productSearch(query: string, completeMatch?: boolean): Promise { - // This method searches a set of sample JSON data for the string entered in the + // This function searches a set of sample JSON data for the string entered in the // custom function, and then returns the search result as one or more entity values. // Set up an error to use if a matching product doesn't exist in the JSON data. @@ -46,7 +46,7 @@ script: } } - // Helper method to create entities from product properties. + // Helper function to create entities from product properties. function makeProductEntity(product?: any) { const entity: Excel.EntityCellValue = { type: "Entity", @@ -113,7 +113,7 @@ script: return entity; } - // Helper method to search the sample JSON product data. + // Helper function to search the sample JSON product data. function searchProduct(query: string, completeMatch: boolean): any { const queryUpperCase = query.toUpperCase(); if (completeMatch === true) { diff --git a/samples/excel/85-preview-apis/data-types-entity-attribution.yaml b/samples/excel/85-preview-apis/data-types-entity-attribution.yaml index 8280b9983..0fd3ce74d 100644 --- a/samples/excel/85-preview-apis/data-types-entity-attribution.yaml +++ b/samples/excel/85-preview-apis/data-types-entity-attribution.yaml @@ -11,11 +11,10 @@ script: $("#add-entities-to-table").click(() => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { + // This function retrieves data for each of the existing products in the table, + // creates entity values for each of those products, and adds the entities + // to the table. await Excel.run(async (context) => { - // This method retrieves data for each of the existing products in the table, - // creates entity values for each of those products, and adds the entities - // to the table. - const productsTable = context.workbook.tables.getItem("ProductsTable"); // Add a new column to the table for the entity values. diff --git a/samples/excel/85-preview-apis/data-types-entity-values.yaml b/samples/excel/85-preview-apis/data-types-entity-values.yaml index 17997f1e4..e3fd81536 100644 --- a/samples/excel/85-preview-apis/data-types-entity-values.yaml +++ b/samples/excel/85-preview-apis/data-types-entity-values.yaml @@ -11,11 +11,10 @@ script: $("#addEntitiesToTable").click(() => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { + // This function retrieves data for each of the existing products in the table, + // creates entity values for each of those products, and adds the entities + // to the table. await Excel.run(async (context) => { - // This method retrieves data for each of the existing products in the table, - // creates entity values for each of those products, and adds the entities - // to the table. - const productsTable = context.workbook.tables.getItem("ProductsTable"); // Add a new column to the table for the entity values. diff --git a/samples/excel/85-preview-apis/data-types-error-values.yaml b/samples/excel/85-preview-apis/data-types-error-values.yaml index fe996af22..613f84433 100644 --- a/samples/excel/85-preview-apis/data-types-error-values.yaml +++ b/samples/excel/85-preview-apis/data-types-error-values.yaml @@ -11,9 +11,8 @@ script: $("#setBusyError").click(() => tryCatch(setBusyError)); async function setBusyError() { + // This function sets the value of cell A1 to a #BUSY! error using data types. await Excel.run(async (context) => { - // This method sets the value of cell A1 to a #BUSY! error using data types. - // Retrieve the Sample worksheet and cell A1 on that sheet. const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); diff --git a/samples/excel/85-preview-apis/data-types-formatted-number.yaml b/samples/excel/85-preview-apis/data-types-formatted-number.yaml index bfc1cb27e..df3a91a76 100644 --- a/samples/excel/85-preview-apis/data-types-formatted-number.yaml +++ b/samples/excel/85-preview-apis/data-types-formatted-number.yaml @@ -13,10 +13,9 @@ script: $("#get-formatted-number").click(() => tryCatch(getFormattedNumber)); async function setFormattedNumberDate() { + // This function creates a formatted number data type, + // and sets the format of this data type as a date. await Excel.run(async (context) => { - // This method creates a formatted number data type, - // and sets the format of this data type as a date. - // Get the Sample worksheet and a range on that sheet. const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const dateRange = sheet.getRange("A1"); @@ -36,10 +35,9 @@ script: } async function setFormattedNumberCurrency() { + // This function creates a formatted number data type, + // and sets the format of this data type as a currency. await Excel.run(async (context) => { - // This method creates a formatted number data type, - // and sets the format of this data type as a currency. - // Get the Sample worksheet and a range on that sheet. const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const currencyRange = sheet.getRange("A2"); @@ -60,10 +58,9 @@ script: } async function getFormattedNumber() { + // This function prints information about data types + // in cells A1 and A2 to the console. await Excel.run(async (context) => { - // This method prints information about data types - // in cells A1 and A2 to the console. - // Get the Sample worksheet and two ranges on that sheet. const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const currencyRange = sheet.getRange("A2"); diff --git a/samples/excel/85-preview-apis/data-types-references.yaml b/samples/excel/85-preview-apis/data-types-references.yaml index 595e59e53..4527a8486 100644 --- a/samples/excel/85-preview-apis/data-types-references.yaml +++ b/samples/excel/85-preview-apis/data-types-references.yaml @@ -11,14 +11,13 @@ script: $("#add-entities-to-table").click(() => tryCatch(addEntitiesToTable)); async function addEntitiesToTable() { + // This function creates entity values with references to other entity values. + // It retrieves data for each of the employees in the table on the worksheet, + // creates entity values for each of those employees, and adds the entities + // to the table. Each employee entity references (or contains) other + // employee entities. In this scenario, the purpose of one employee + // referencing another is to show a managerial hierarchy. await Excel.run(async (context) => { - // This method creates entity values with references to other entity values. - // It retrieves data for each of the employees in the table on the worksheet, - // creates entity values for each of those employees, and adds the entities - // to the table. Each employee entity references (or contains) other - // employee entities. In this scenario, the purpose of one employee - // referencing another is to show a managerial hierarchy. - const employeesTable = context.workbook.tables.getItem("EmployeesTable"); // Refresh the table column with the entity values. @@ -67,7 +66,7 @@ script: }); } - // Helper method to collect all the references for the employee entity. + // Helper function to collect all the references for the employee entity. // A reference means one entity contains another entity. function collectReferences(employee) { const references: number[] = []; @@ -75,7 +74,7 @@ script: return references; } - // Helper method to collect manager and direct report references for each employee entity. + // Helper function to collect manager and direct report references for each employee entity. function collectManagerReferences(employee, references: number[]) { // Confirm references haven't already been collected for this employee. if (references.indexOf(employee.employeeID) >= 0) { @@ -100,7 +99,7 @@ script: } } - // Helper method to check whether a specific reference ID exists in a list of IDs. + // Helper function to check whether a specific reference ID exists in a list of IDs. // If the ID doesn't exist, add it to the list. function ensureReferenceExist(list: number[], id: number) { if (list.indexOf(id) < 0) { diff --git a/samples/excel/85-preview-apis/data-types-web-image.yaml b/samples/excel/85-preview-apis/data-types-web-image.yaml index 55f89d604..7cb9e5d93 100644 --- a/samples/excel/85-preview-apis/data-types-web-image.yaml +++ b/samples/excel/85-preview-apis/data-types-web-image.yaml @@ -14,9 +14,8 @@ script: $("#clear-form").click(() => tryCatch(clearForm)); async function insertImage() { + // This function inserts a web image into the currently selected cell. await Excel.run(async (context) => { - // This method inserts a web image into the currently selected cell. - // 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; @@ -47,9 +46,8 @@ script: } async function retrieveImageInfo() { + // This function retrieves image data from a selected cell and displays it in the existing input fields in the task pane. await Excel.run(async (context) => { - // This method retrieves image data from a selected cell and displays it in the existing input fields in the task pane. - // Load the active cell information. const activeCell = context.workbook.getActiveCell(); activeCell.load("valuesAsJson"); @@ -73,9 +71,8 @@ script: } async function openImage() { + // This function retrieves the image URL from the selected cell and opens that image in a new browser tab. await Excel.run(async (context) => { - // This method retrieves the image URL from the selected cell and opens that image in a new browser tab. - // Load the active cell information. const activeCell = context.workbook.getActiveCell(); activeCell.load("valuesAsJson"); diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 2e4b17f2b..1bec35b21 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -13,10 +13,10 @@ script: $("#create-shape-with-text").click(() => tryCatch(createShapeWithText)); $("#remove-all").click(() => tryCatch(removeAll)); - // 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. async function createHexagon() { + // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, @@ -32,9 +32,9 @@ script: }); } - // This function gets the collection of shapes on the first slide, - // gets the first shape in the collection, and resets its size. async function shrinkHexagon() { + // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var hexagon = shapes.getItemAt(0); @@ -45,9 +45,9 @@ script: }); } - // This function gets the collection of shapes on the first slide, - // gets the first shape in the collection, and resets its location. async function moveHexagon() { + // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var hexagon = shapes.getItemAt(0); @@ -58,10 +58,10 @@ script: }); } - // 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. async function createLine() { + // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; @@ -80,10 +80,10 @@ script: }); } - // This function gets the collection of shapes on the first slide, - // and adds a text box to the collection, while specifying its text, - // location, and size. Then it names the text box. async function createTextBox() { + // This function gets the collection of shapes on the first slide, + // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var textbox = shapes.addTextBox("Hello!", @@ -99,11 +99,11 @@ script: }); } - // 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. async function createShapeWithText() { + // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { @@ -121,9 +121,9 @@ script: }); } - // This function gets the collection of shapes on the first slide, - // and then iterates through them, deleting each one. async function removeAll() { + // 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; diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index e8b934b29..9462d2fd3 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -50,7 +50,7 @@ script: function getSelectedSlideID() { // Wrap a call of one of the Common APIs in a Promise-returning - // function, so that it can be easily called within a run() method + // function, so that it can be easily called within a run() function // of an application-specific API. return new OfficeExtension.Promise(function(resolve, reject) { Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function(asyncResult) { diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 07ebe97ec..52fda7222 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -36,7 +36,7 @@ script: function getSelectedSlideIndex() { // Wrap a call of one of the Common APIs in a Promise-returning - // function, so that it can be easily called within a run() method + // function, so that it can be easily called within a run() function // of an application-specific API. return new OfficeExtension.Promise(function (resolve, reject) { Office.context.document.getSelectedDataAsync(Office.CoercionType.SlideRange, function (asyncResult) { diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index afd372abd..265c62eb5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -73,10 +73,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - await Excel.run(async (context) => { - // This method adds a percentage AutoFilter to the active worksheet - // and applies the filter to a column of the used range. + // 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(); @@ -94,9 +95,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - await Excel.run(async (context) => { - // This method refreshes the AutoFilter to ensure that changes are captured. + // This function refreshes the AutoFilter to ensure that changes are + captured. + await Excel.run(async (context) => { // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -109,9 +111,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - await Excel.run(async (context) => { - // This method clears the AutoFilter setting from one column. + // This function clears the AutoFilter setting from one column. + await Excel.run(async (context) => { // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -124,9 +126,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - await Excel.run(async (context) => { - // This method removes all AutoFilters from the active worksheet. + // This function removes all AutoFilters from the active worksheet. + await Excel.run(async (context) => { // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); @@ -420,9 +422,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml - await Excel.run(async (context) => { - // This method sets the value of cell A1 to a #BUSY! error using data types. + // This function sets the value of cell A1 to a #BUSY! error using data + types. + await Excel.run(async (context) => { // Retrieve the Sample worksheet and cell A1 on that sheet. const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); @@ -504,9 +507,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adds a data table to a chart that already exists on the worksheet. + // This function adds a data table to a chart that already exists on the + worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -617,9 +621,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adds a data table to a chart that already exists on the worksheet. + // This function adds a data table to a chart that already exists on the + worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -634,9 +639,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. + // This function adjusts the display and format of a chart data table that + already exists on the worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -662,9 +668,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. + // This function adjusts the display and format of a chart data table that + already exists on the worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -690,9 +697,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. + // This function adjusts the display and format of a chart data table that + already exists on the worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -718,9 +726,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. + // This function adjusts the display and format of a chart data table that + already exists on the worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -746,9 +755,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. + // This function adjusts the display and format of a chart data table that + already exists on the worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -774,9 +784,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. + // This function adjusts the display and format of a chart data table that + already exists on the worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -802,9 +813,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/10-chart/chart-data-table.yaml - await Excel.run(async (context) => { - // This method adjusts the display and format of a chart data table that already exists on the worksheet. + // This function adjusts the display and format of a chart data table that + already exists on the worksheet. + await Excel.run(async (context) => { // Retrieve the chart named "SalesChart" from the "Sample" worksheet. const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); @@ -893,8 +905,10 @@ // 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. + await Excel.run(async (context) => { - // This method retrieves the data source information of a chart series in the Sample worksheet. const sheet = context.workbook.worksheets.getItem("Sample"); // Get the first chart series from the first chart on the worksheet. @@ -917,8 +931,10 @@ // 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. + await Excel.run(async (context) => { - // This method retrieves the data source information of a chart series in the Sample worksheet. const sheet = context.workbook.worksheets.getItem("Sample"); // Get the first chart series from the first chart on the worksheet. @@ -1364,9 +1380,9 @@ 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. await Excel.run(async (context) => { - // Retrieve the added comment using the comment ID. - // Note: This method assumes only a single comment is added at a time. const addedComment = context.workbook.comments.getItem(event.commentDetails[0].commentId); // Load the added comment's data. @@ -1404,9 +1420,9 @@ 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. await Excel.run(async (context) => { - // Retrieve the changed comment using the comment ID. - // Note: This method assumes only a single comment is changed at a time. const changedComment = context.workbook.comments.getItem(event.commentDetails[0].commentId); // Load the changed comment's data. @@ -1444,9 +1460,9 @@ 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. await Excel.run(async (context) => { - // Print out the deleted comment's ID. - // Note: This method assumes only a single comment is deleted at a time. console.log(`A comment was deleted:`); console.log(` ID: ${event.commentDetails[0].commentId}`); }); @@ -1660,8 +1676,8 @@ With a "three*" icon set style, such as "threeTriangles", the third element in the criteria array (criteria[2]) defines the "top" icon; e.g., a green triangle. The second (criteria[1]) defines the "middle" - icon, The first (criteria[0]) defines the "low" icon, but it - can often be left empty as this method does below, because every + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every cell that does not match the other two criteria always gets the low icon. */ @@ -1840,8 +1856,8 @@ With a "three*" icon set style, such as "threeTriangles", the third element in the criteria array (criteria[2]) defines the "top" icon; e.g., a green triangle. The second (criteria[1]) defines the "middle" - icon, The first (criteria[0]) defines the "low" icon, but it - can often be left empty as this method does below, because every + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every cell that does not match the other two criteria always gets the low icon. */ @@ -1883,8 +1899,8 @@ With a "three*" icon set style, such as "threeTriangles", the third element in the criteria array (criteria[2]) defines the "top" icon; e.g., a green triangle. The second (criteria[1]) defines the "middle" - icon, The first (criteria[0]) defines the "low" icon, but it - can often be left empty as this method does below, because every + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every cell that does not match the other two criteria always gets the low icon. */ @@ -1940,8 +1956,8 @@ With a "three*" icon set style, such as "threeTriangles", the third element in the criteria array (criteria[2]) defines the "top" icon; e.g., a green triangle. The second (criteria[1]) defines the "middle" - icon, The first (criteria[0]) defines the "low" icon, but it - can often be left empty as this method does below, because every + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every cell that does not match the other two criteria always gets the low icon. */ @@ -2575,9 +2591,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml - await Excel.run(async (context) => { - // This method sets the value of cell A1 to a #BUSY! error using data types. + // This function sets the value of cell A1 to a #BUSY! error using data + types. + await Excel.run(async (context) => { // Retrieve the Sample worksheet and cell A1 on that sheet. const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); @@ -2597,9 +2614,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml - await Excel.run(async (context) => { - // This method sets the value of cell A1 to a #BUSY! error using data types. + // This function sets the value of cell A1 to a #BUSY! error using data + types. + await Excel.run(async (context) => { // Retrieve the Sample worksheet and cell A1 on that sheet. const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); const range = sheet.getRange("A1"); @@ -2619,10 +2637,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - await Excel.run(async (context) => { - // This method adds a percentage AutoFilter to the active worksheet - // and applies the filter to a column of the used range. + // 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(); @@ -2640,10 +2659,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml - await Excel.run(async (context) => { - // This method creates a formatted number data type, - // and sets the format of this data type as a currency. + // 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"); @@ -2666,10 +2686,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml - await Excel.run(async (context) => { - // This method creates a formatted number data type, - // and sets the format of this data type as a date. + // 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"); @@ -2708,8 +2729,8 @@ With a "three*" icon set style, such as "threeTriangles", the third element in the criteria array (criteria[2]) defines the "top" icon; e.g., a green triangle. The second (criteria[1]) defines the "middle" - icon, The first (criteria[0]) defines the "low" icon, but it - can often be left empty as this method does below, because every + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every cell that does not match the other two criteria always gets the low icon. */ @@ -2751,8 +2772,8 @@ With a "three*" icon set style, such as "threeTriangles", the third element in the criteria array (criteria[2]) defines the "top" icon; e.g., a green triangle. The second (criteria[1]) defines the "middle" - icon, The first (criteria[0]) defines the "low" icon, but it - can often be left empty as this method does below, because every + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every cell that does not match the other two criteria always gets the low icon. */ @@ -3484,9 +3505,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml - await Excel.run(async (context) => { - // This method logs information about the data source of a PivotTable. + // This function logs information about the data source of a PivotTable. + await Excel.run(async (context) => { const worksheet = context.workbook.worksheets.getItem("TotalPivot"); const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); @@ -3504,9 +3525,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-source-data.yaml - await Excel.run(async (context) => { - // This method logs information about the data source of a PivotTable. + // This function logs information about the data source of a PivotTable. + await Excel.run(async (context) => { const worksheet = context.workbook.worksheets.getItem("TotalPivot"); const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); @@ -3524,9 +3545,11 @@ // 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. + await Excel.run(async (context) => { - // This method refreshes the "Farm Sales" PivotTable, - // which updates the PivotTable with changes made to the source table. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); pivotTable.refresh(); await context.sync(); @@ -3548,9 +3571,11 @@ // 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. + await Excel.run(async (context) => { - // This method refreshes the "Farm Sales" PivotTable, - // which updates the PivotTable with changes made to the source table. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); pivotTable.refresh(); await context.sync(); @@ -3611,10 +3636,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.yaml - await Excel.run(async (context) => { - // This method highlights all the dependent cells of the active cell. - // Dependent cells contain formulas that refer to other cells. + // 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(); @@ -4156,7 +4182,7 @@ await context.sync(); if (asianContestRange.isNullObject) { - // See the declaration of this method for how to + // See the declaration of this function for how to // test this code path. reportMissingData("Asian"); } else { @@ -4170,7 +4196,7 @@ } if (europeanContestRange.isNullObject) { - // See the declaration of this method for how to + // See the declaration of this function for how to // test this code path. reportMissingData("European"); } else { @@ -4215,7 +4241,7 @@ await context.sync(); if (asianContestRange.isNullObject) { - // See the declaration of this method for how to + // See the declaration of this function for how to // test this code path. reportMissingData("Asian"); } else { @@ -4229,7 +4255,7 @@ } if (europeanContestRange.isNullObject) { - // See the declaration of this method for how to + // See the declaration of this function for how to // test this code path. reportMissingData("European"); } else { @@ -4359,10 +4385,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml - await Excel.run(async (context) => { - // This method creates a formatted number data type, - // and sets the format of this data type as a date. + // 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"); @@ -5339,9 +5366,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml - await Excel.run(async (context) => { - // This method retrieves the image URL from the selected cell and opens that image in a new browser tab. + // This function retrieves the image URL from the selected cell and opens + that image in a new browser tab. + await Excel.run(async (context) => { // Load the active cell information. const activeCell = context.workbook.getActiveCell(); activeCell.load("valuesAsJson"); @@ -5365,9 +5393,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml - await Excel.run(async (context) => { - // This method inserts a web image into the currently selected cell. + // 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; @@ -5772,9 +5800,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet-protection.yaml - await Excel.run(async (context) => { - // This method registers an event handler for the onProtectionChanged event of a worksheet. + // This function registers an event handler for the onProtectionChanged + event of a worksheet. + await Excel.run(async (context) => { // Set "Sample" as the active worksheet. context.workbook.worksheets.getItemOrNullObject("Sample").delete(); const sheet = context.workbook.worksheets.add("Sample"); @@ -5791,8 +5820,9 @@ async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { + // This function is an event handler that returns the protection status of a worksheet + // and information about the changed worksheet. await Excel.run(async (context) => { - // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. const protectionStatus = event.isProtected; const worksheetId = event.worksheetId; const source = event.source; @@ -5891,10 +5921,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-auto-filter.yaml - await Excel.run(async (context) => { - // This method adds a percentage AutoFilter to the active worksheet - // and applies the filter to a column of the used range. + // 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(); @@ -6040,10 +6071,9 @@ 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. await Excel.run(async (context) => { - // This method is an event handler that returns the address, trigger source, - // and insert or delete shift directions of the change. - // Return the address where change occurred. console.log(`Handler for worksheet onChanged event has been triggered.`); console.log(` Data changed address: ` + event.address); @@ -6069,8 +6099,10 @@ // 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". + await Excel.run(async (context) => { - // This method deletes data from a range and sets the delete shift direction to "up". const sheet = context.workbook.worksheets.getItem("Sample"); const range = sheet.getRange("A5:F5"); range.delete(Excel.DeleteShiftDirection.up); @@ -6081,10 +6113,9 @@ 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. await Excel.run(async (context) => { - // This method is an event handler that returns the address, trigger source, - // and insert or delete shift directions of the change. - // Return the address where change occurred. console.log(`Handler for worksheet onChanged event has been triggered.`); console.log(` Data changed address: ` + event.address); @@ -6347,8 +6378,9 @@ async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { + // This function is an event handler that returns the protection status of a worksheet + // and information about the changed worksheet. await Excel.run(async (context) => { - // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. const protectionStatus = event.isProtected; const worksheetId = event.worksheetId; const source = event.source; @@ -6364,8 +6396,9 @@ async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { + // This function is an event handler that returns the protection status of a worksheet + // and information about the changed worksheet. await Excel.run(async (context) => { - // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. const protectionStatus = event.isProtected; const worksheetId = event.worksheetId; const source = event.source; @@ -6381,8 +6414,9 @@ async function checkProtection(event: Excel.WorksheetProtectionChangedEventArgs) { + // This function is an event handler that returns the protection status of a worksheet + // and information about the changed worksheet. await Excel.run(async (context) => { - // This method is an event handler that returns the protection status of a worksheet and information about the changed worksheet. const protectionStatus = event.isProtected; const worksheetId = event.worksheetId; const source = event.source; @@ -10957,6 +10991,12 @@ // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, @@ -10975,6 +11015,12 @@ // 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) => { var shapes = context.presentation.slides.getItemAt(0).shapes; @@ -10996,6 +11042,12 @@ // 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, + + // location, and size. Then it names the text box. + await PowerPoint.run(async (context) => { var shapes = context.presentation.slides.getItemAt(0).shapes; var textbox = shapes.addTextBox("Hello!", From 936fc186988f654bd234ac487f5365749189f480 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 22 Jul 2022 10:53:33 -0700 Subject: [PATCH 094/336] [Outlook] Add MailboxEnums to enum names (#669) --- snippet-extractor-metadata/outlook.xlsx | Bin 21250 -> 21259 bytes snippet-extractor-output/snippets.yaml | 320 ++++++++++++------------ 2 files changed, 160 insertions(+), 160 deletions(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index f4e1d56a2b6564b53d09b84e662f673fc9067f1d..3d78ce8c542d7aee2a39e58bd6e3c87829b5adf9 100644 GIT binary patch delta 10410 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 CWn4c1 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 265c62eb5..64de8dcd4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -7985,49 +7985,6 @@ console.log("There are no locations."); } }); -'Office.AppointmentSensitivity:enum': - - >- - // 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) { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); - } else { - console.log("Successfully set appointment sensitivity."); - } - } - ); -'Office.AttachmentContentFormat:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } - } 'Office.Body#setSignatureAsync:member(1)': - >- // Link to full sample: @@ -8149,27 +8106,6 @@ console.error(asyncResult.error); } }); -'Office.CategoryColor:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - - var masterCategoriesToAdd = [ - { - displayName: "TestCategory", - color: Office.MailboxEnums.CategoryColor.Preset0 - } - ]; - - - Office.context.mailbox.masterCategories.addAsync(masterCategoriesToAdd, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Successfully added categories to master list"); - } else { - console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); - } - }); 'Office.CustomProperties#get:member(1)': - >- // Link to full sample: @@ -8206,52 +8142,6 @@ customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); -'Office.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) { - var ewsId = Office.context.mailbox.item.itemId; - var 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.EnhancedLocation#getAsync:member(1)': - >- // Link to full sample: @@ -8322,12 +8212,6 @@ console.error(`Failed to remove locations. Error message: ${result.error.message}`); } }); -'Office.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.From#getAsync:member(1)': - >- // Link to full sample: @@ -8438,30 +8322,6 @@ } console.log(`Successfully set location to ${location}`); }); -'Office.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 - - var locations = [ - { - id: "Contoso", - type: Office.MailboxEnums.LocationType.Custom - }, - { - id: "room500@test.com", - type: Office.MailboxEnums.LocationType.Room - } - ]; - - Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => - { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully added locations ${JSON.stringify(locations)}`); - } else { - console.error(`Failed to add locations. Error message: ${result.error.message}`); - } - }); 'Office.Mailbox#masterCategories:member': - >- // Link to full sample: @@ -8903,6 +8763,166 @@ console.log(result.value); } }); +'Office.MailboxEnums.AppointmentSensitivity:enum': + - >- + // 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) { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Failed to set appointment sensitivity: " + JSON.stringify(asyncResult.error)); + } else { + console.log("Successfully set appointment sensitivity."); + } + } + ); +'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 + + function handleAttachmentsCallback(result) { + // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log(result.value.content); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that are not supported. + } + } +'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 + + var masterCategoriesToAdd = [ + { + displayName: "TestCategory", + color: Office.MailboxEnums.CategoryColor.Preset0 + } + ]; + + + Office.context.mailbox.masterCategories.addAsync(masterCategoriesToAdd, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Successfully added categories to master list"); + } else { + console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); + } + }); +'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) { + var ewsId = Office.context.mailbox.item.itemId; + var 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.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.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 + + var locations = [ + { + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom + }, + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room + } + ]; + + Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => + { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully added locations ${JSON.stringify(locations)}`); + } else { + console.error(`Failed to add locations. Error message: ${result.error.message}`); + } + }); +'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 + + Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function + (result) { + var ewsId = Office.context.mailbox.item.itemId; + var token = result.value; + var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + + var xhr = new XMLHttpRequest(); + xhr.open('GET', getMessageUrl); + xhr.setRequestHeader("Authorization", "Bearer " + token); + xhr.onload = function (e) { + console.log(this.response); + } + xhr.send(); + }); 'Office.MasterCategories#getAsync:member(2)': - >- // Link to full sample: @@ -10631,26 +10651,6 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); -'Office.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 - - Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function - (result) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; - - var xhr = new XMLHttpRequest(); - xhr.open('GET', getMessageUrl); - xhr.setRequestHeader("Authorization", "Bearer " + token); - xhr.onload = function (e) { - console.log(this.response); - } - xhr.send(); - }); 'Office.RoamingSettings#get:member(1)': - >- // Link to full sample: From 679c25f05779d9f7463c102647a46658e9f46b73 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 26 Jul 2022 10:22:27 -0700 Subject: [PATCH 095/336] [Outlook] (var) Replace var to let or const in Outlook JS snippets (#670) --- .../10-roaming-settings/roaming-settings.yaml | 8 +- .../load-set-get-save.yaml | 20 +- .../20-item-body/get-selected-data.yaml | 4 +- .../get-cc-message-read.yaml | 4 +- .../get-from-message-compose.yaml | 2 +- .../get-from-message-read.yaml | 2 +- ...tional-attendees-appointment-attendee.yaml | 4 +- .../get-organizer-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-organizer.yaml | 2 +- ...quired-attendees-appointment-attendee.yaml | 4 +- .../get-sender-message-read.yaml | 2 +- .../get-set-bcc-message-compose.yaml | 8 +- .../get-set-cc-message-compose.yaml | 8 +- ...ional-attendees-appointment-organizer.yaml | 8 +- ...uired-attendees-appointment-organizer.yaml | 8 +- .../get-set-to-message-compose.yaml | 8 +- .../get-to-message-read.yaml | 4 +- .../35-notifications/add-getall-remove.yaml | 20 +- .../40-attachments/attachments-compose.yaml | 10 +- .../get-attachment-content.yaml | 6 +- .../40-attachments/get-attachments-read.yaml | 2 +- .../45-categories/work-with-categories.yaml | 10 +- .../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 | 8 +- .../work-with-client-signatures.yaml | 6 +- .../get-shared-properties.yaml | 8 +- .../basic-entities.yaml | 4 +- .../selected.yaml | 6 +- .../basic-rest-cors.yaml | 10 +- .../ids-and-urls.yaml | 6 +- .../make-ews-request-async.yaml | 4 +- ...-message-using-make-ews-request-async.yaml | 2 +- ...d-remove-enhancedlocation-appointment.yaml | 6 +- .../get-set-end-appointment-organizer.yaml | 2 +- ...et-set-location-appointment-organizer.yaml | 2 +- .../get-set-start-appointment-organizer.yaml | 2 +- snippet-extractor-output/snippets.yaml | 544 +++++++++--------- 42 files changed, 389 insertions(+), 389 deletions(-) diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index c86dc2430..527dcca19 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -11,15 +11,15 @@ script: $("#save").click(save); function get() { - var settingName = $("#settingName").val(); - var settingValue = Office.context.roamingSettings.get(settingName); + const settingName = $("#settingName").val(); + const settingValue = Office.context.roamingSettings.get(settingName); $("#settingValue").val(settingValue); console.log(`The value of setting "${settingName}" is "${settingValue}".`); } function set() { - var settingName = $("#settingName").val(); - var settingValue = $("#settingValue").val(); + const settingName = $("#settingName").val(); + const settingValue = $("#settingValue").val(); 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 c24b37bdc..cf3c2fb7f 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 @@ -6,7 +6,7 @@ api_set: Mailbox: '1.1' script: content: | - var customProps; + let customProps; $("#load").click(load); $("#get").click(get); @@ -19,11 +19,11 @@ script: if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) + const dataKey = Object.keys(customProps)[0]; + const data = customProps[dataKey]; + for (let propertyName in data) { - var propertyValue = data[propertyName]; + let propertyValue = data[propertyName]; console.log(`${propertyName}: ${propertyValue}`); } } @@ -34,21 +34,21 @@ script: } function get() { - var propertyName = $("#propertyName").val(); - var propertyValue = customProps.get(propertyName); + const propertyName = $("#propertyName").val(); + const propertyValue = customProps.get(propertyName); $("#propertyValue").val(propertyValue); console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); } function set() { - var propertyName = $("#propertyName").val(); - var propertyValue = $("#propertyValue").val(); + const propertyName = $("#propertyName").val(); + const propertyValue = $("#propertyValue").val(); customProps.set(propertyName, propertyValue); console.log(`Custom property "${propertyName}" set to value "${propertyValue}".`); } function remove() { - var propertyName = $("#propertyName").val(); + const propertyName = $("#propertyName").val(); customProps.remove(propertyName); console.log(`Custom property "${propertyName}" removed.`); } diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml index d2721dd2c..76e2c16b7 100644 --- a/samples/outlook/20-item-body/get-selected-data.yaml +++ b/samples/outlook/20-item-body/get-selected-data.yaml @@ -12,8 +12,8 @@ script: function getSelectedData() { Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var text = asyncResult.value.data; - var prop = asyncResult.value.sourceProperty; + const text = asyncResult.value.data; + const prop = asyncResult.value.sourceProperty; console.log("Selected text in " + prop + ": " + text); } else { console.error(asyncResult.error); 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 03898b0c9..dc284302a 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 @@ -10,9 +10,9 @@ script: $("#get-cc").click(getCc); function getCc() { - var msgCc = Office.context.mailbox.item.cc; + const msgCc = Office.context.mailbox.item.cc; console.log("Message copied to:"); - for (var i = 0; i < msgCc.length; i++) { + for (let i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } } 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 daef2e171..7e556daa8 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 @@ -12,7 +12,7 @@ script: function getFrom() { Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgFrom = asyncResult.value; + const msgFrom = asyncResult.value; console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); } else { console.error(asyncResult.error); 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 c5e7e1e79..1a1dd7421 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 @@ -10,7 +10,7 @@ script: $("#get-from").click(getFrom); function getFrom() { - var msgFrom = Office.context.mailbox.item.from; + const msgFrom = Office.context.mailbox.item.from; console.log("Message received from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); } language: typescript 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 9ed1b3bdd..5fe180f31 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 @@ -10,9 +10,9 @@ script: $("#get-optional-attendees").click(getOptionalAttendees); function getOptionalAttendees() { - var apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; + const apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; console.log("Optional attendees:"); - for (var i = 0; i < apptOptionalAttendees.length; i++) { + for (let i = 0; i < apptOptionalAttendees.length; i++) { console.log( apptOptionalAttendees[i].displayName + " (" + 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 9dca86116..a7e4a5c41 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 @@ -10,7 +10,7 @@ script: $("#get-organizer").click(getOrganizer); function getOrganizer() { - var apptOrganizer = Office.context.mailbox.item.organizer; + const apptOrganizer = Office.context.mailbox.item.organizer; console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); } language: typescript 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 89216644b..9c20fdbb5 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 @@ -12,7 +12,7 @@ script: function getOrganizer() { Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOrganizer = asyncResult.value; + const apptOrganizer = asyncResult.value; console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); } else { console.error(asyncResult.error); 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 7b22ccbda..134c433bd 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 @@ -10,9 +10,9 @@ script: $("#get-required-attendees").click(getRequiredAttendees); function getRequiredAttendees() { - var apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; + const apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; console.log("Required attendees:"); - for (var i = 0; i < apptRequiredAttendees.length; i++) { + for (let i = 0; i < apptRequiredAttendees.length; i++) { console.log( apptRequiredAttendees[i].displayName + " (" + 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 be8c7922a..a43e7e738 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 @@ -10,7 +10,7 @@ script: $("#get-sender").click(getSender); function getSender() { - var msgSender = Office.context.mailbox.item.sender; + const msgSender = Office.context.mailbox.item.sender; console.log("Sender: " + msgSender.displayName + " (" + msgSender.emailAddress + ")"); } language: typescript 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 7ba66d7bf..fe42a896b 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 @@ -13,9 +13,9 @@ script: function getBcc() { Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgBcc = asyncResult.value; + const msgBcc = asyncResult.value; console.log("Message being blind-copied to:"); - for (var i = 0; i < msgBcc.length; i++) { + for (let i = 0; i < msgBcc.length; i++) { console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); } } else { @@ -25,10 +25,10 @@ script: } function setBcc() { - var email = $("#emailBcc") + const email = $("#emailBcc") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Succeeded in setting Bcc field."); 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 1d1f1c87c..1b67b55cc 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 @@ -13,9 +13,9 @@ script: function getCc() { Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgCc = asyncResult.value; + const msgCc = asyncResult.value; console.log("Message being copied to:"); - for (var i = 0; i < msgCc.length; i++) { + for (let i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } } else { @@ -25,10 +25,10 @@ script: } function setCc() { - var email = $("#emailCc") + const email = $("#emailCc") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Succeeded in setting Cc field."); 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 3e7686dca..6055c1a47 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 @@ -13,8 +13,8 @@ script: function getOptionalAttendees() { Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOptionalAttendees = asyncResult.value; - for (var i = 0; i < apptOptionalAttendees.length; i++) { + const apptOptionalAttendees = asyncResult.value; + for (let i = 0; i < apptOptionalAttendees.length; i++) { console.log( "Optional attendees: " + apptOptionalAttendees[i].displayName + @@ -31,10 +31,10 @@ script: } function setOptionalAttendees() { - var email = $("#emailOptional") + const email = $("#emailOptional") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Succeeded in setting optional attendees field."); 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 45e5dc787..6ca144775 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 @@ -13,8 +13,8 @@ script: function getRequiredAttendees() { Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptRequiredAttendees = asyncResult.value; - for (var i = 0; i < apptRequiredAttendees.length; i++) { + const apptRequiredAttendees = asyncResult.value; + for (let i = 0; i < apptRequiredAttendees.length; i++) { console.log( "Required attendees: " + apptRequiredAttendees[i].displayName + @@ -31,10 +31,10 @@ script: } function setRequiredAttendees() { - var email = $("#emailRequired") + const email = $("#emailRequired") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Succeeded in setting required attendees field."); 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 e233625a8..3d709374f 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 @@ -13,9 +13,9 @@ script: function getTo() { Office.context.mailbox.item.to.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgTo = asyncResult.value; + const msgTo = asyncResult.value; console.log("Message being sent to:"); - for (var i = 0; i < msgTo.length; i++) { + for (let i = 0; i < msgTo.length; i++) { console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); } } else { @@ -25,10 +25,10 @@ script: } function setTo() { - var email = $("#emailTo") + const email = $("#emailTo") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log("Succeeded in setting To field."); 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 9983e8444..3e2f567d3 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 @@ -10,9 +10,9 @@ script: $("#get-to").click(getTo); function getTo() { - var msgTo = Office.context.mailbox.item.to; + const msgTo = Office.context.mailbox.item.to; console.log("Message sent to:"); - for (var i = 0; i < msgTo.length; i++) { + for (let i = 0; i < msgTo.length; i++) { console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); } } diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 813f4a12a..479da2944 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -15,8 +15,8 @@ script: $("#remove").click(remove); function addProgress() { - var id = $("#notificationId").val(); - var details = + const id = $("#notificationId").val(); + const details = { type: "progressIndicator", message: "Progress indicator with id = " + id @@ -25,8 +25,8 @@ script: } function addInformational() { - var id = $("#notificationId").val(); - var details = + const id = $("#notificationId").val(); + const details = { type: "informationalMessage", message: "Non-persistent informational notification message with id = " + id, @@ -37,8 +37,8 @@ script: } function addInformationalPersisted() { - var id = $("#notificationId").val(); - var details = + const id = $("#notificationId").val(); + const details = { type: "informationalMessage", message: "Persistent informational notification message with id = " + id, @@ -49,8 +49,8 @@ script: } function addError() { - var id = $("#notificationId").val(); - var details = + const id = $("#notificationId").val(); + const details = { type: "errorMessage", message: "Error notification message with id = " + id @@ -63,7 +63,7 @@ script: } function replace() { - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, { @@ -76,7 +76,7 @@ script: } function remove() { - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); 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 1ba54c00e..3fb3ea1f4 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -13,7 +13,7 @@ script: $("#remove").click(remove); function add() { - var attachmentUrl = $("#attachmentUrl").val(); + const attachmentUrl = $("#attachmentUrl").val(); Office.context.mailbox.item.addFileAttachmentAsync( attachmentUrl, getFileName(attachmentUrl), @@ -22,7 +22,7 @@ script: } function addItemAttachment() { - var attachmentItemId = $("#attachmentItemId").val(); + const attachmentItemId = $("#attachmentItemId").val(); Office.context.mailbox.item.addItemAttachmentAsync( attachmentItemId, "My attachment", @@ -45,8 +45,8 @@ script: console.error(result.error.message); } else { if (result.value.length > 0) { - for (var i = 0; i < result.value.length; i++) { - var attachment = result.value[i]; + for (let i = 0; i < result.value.length; i++) { + let attachment = result.value[i]; console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); } } @@ -73,7 +73,7 @@ script: } function getFileName(url) { - var lastIndex = url.lastIndexOf('/'); + const lastIndex = url.lastIndexOf('/'); if (lastIndex >= 0) { return url.substring(lastIndex + 1); } diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index 6ecee8e46..049b48671 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -9,13 +9,13 @@ script: $("#run").click(run); function run() { - var item = Office.context.mailbox.item; - var options = {asyncContext: {currentItem: item}}; + const item = Office.context.mailbox.item; + const options = {asyncContext: {currentItem: item}}; item.getAttachmentsAsync(options, callback); function callback(result) { if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { + for (let i = 0 ; i < result.value.length ; i++) { result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } } diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index 7b9fd8efc..cea5e1545 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -9,7 +9,7 @@ script: $("#run").click(run); function run() { - var attachments = Office.context.mailbox.item.attachments; + const attachments = Office.context.mailbox.item.attachments; console.log(attachments); } language: typescript diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index c28c5abda..126f70bd0 100644 --- a/samples/outlook/45-categories/work-with-categories.yaml +++ b/samples/outlook/45-categories/work-with-categories.yaml @@ -14,7 +14,7 @@ script: function getCategories() { Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Categories assigned to this item:"); console.log(JSON.stringify(categories)); @@ -33,10 +33,10 @@ script: Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; + const masterCategories = asyncResult.value; if (masterCategories && masterCategories.length > 0) { // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; + const categoryToAdd = [masterCategories[0].displayName]; Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully assigned category '${categoryToAdd}' to item.`); @@ -56,10 +56,10 @@ script: function removeCategories() { Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; + const categoryToRemove = [categories[0].displayName]; Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); diff --git a/samples/outlook/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index 92d7a9805..7800fd86b 100644 --- a/samples/outlook/45-categories/work-with-master-categories.yaml +++ b/samples/outlook/45-categories/work-with-master-categories.yaml @@ -14,7 +14,7 @@ script: function getMasterCategories() { Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Master categories:"); console.log(JSON.stringify(categories)); @@ -28,7 +28,7 @@ script: } function addMasterCategories() { - var masterCategoriesToAdd = [ + const masterCategoriesToAdd = [ { displayName: "TestCategory", color: Office.MailboxEnums.CategoryColor.Preset0 @@ -45,7 +45,7 @@ script: } function removeMasterCategories() { - var masterCategoriesToRemove = ["TestCategory"]; + const masterCategoriesToRemove = ["TestCategory"]; Office.context.mailbox.masterCategories.removeAsync(masterCategoriesToRemove, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { diff --git a/samples/outlook/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index c2862943e..c8db693f5 100644 --- a/samples/outlook/50-recurrence/get-recurrence-read.yaml +++ b/samples/outlook/50-recurrence/get-recurrence-read.yaml @@ -10,7 +10,7 @@ script: $("#get").click(get); function get() { - var recurrence = Office.context.mailbox.item.recurrence; + const recurrence = Office.context.mailbox.item.recurrence; if (recurrence === undefined) { console.log("This item is a message but not a meeting request."); diff --git a/samples/outlook/50-recurrence/get-series-id.yaml b/samples/outlook/50-recurrence/get-series-id.yaml index 95e305d0f..e629fc34c 100644 --- a/samples/outlook/50-recurrence/get-series-id.yaml +++ b/samples/outlook/50-recurrence/get-series-id.yaml @@ -10,7 +10,7 @@ script: $("#get-series-id").click(getSeriesId); function getSeriesId() { - var seriesId = Office.context.mailbox.item.seriesId; + const seriesId = Office.context.mailbox.item.seriesId; if (seriesId === undefined) { console.log("This is a message that's not a meeting request."); 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 ae4252b08..e175bc619 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -13,7 +13,7 @@ script: function get() { Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var recurrence = asyncResult.value; + const recurrence = asyncResult.value; if (recurrence === null) { console.log("This is a single appointment."); } else { @@ -28,7 +28,7 @@ script: function set() { // Important: Can only set the recurrence pattern of an appointment series. - var currentDate = new Date(); + const currentDate = new Date(); let seriesTimeObject : Office.SeriesTime; // Set series start date to tomorrow. seriesTimeObject.setStartDate( diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index 0eb81f3af..5fab43f47 100644 --- a/samples/outlook/55-display-items/display-existing-appointment.yaml +++ b/samples/outlook/55-display-items/display-existing-appointment.yaml @@ -14,12 +14,12 @@ script: $("#run-async").click(runAsync); function run() { - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); Office.context.mailbox.displayAppointmentForm(itemId); } function runAsync() { - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); // 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 2da411b8c..b070c328f 100644 --- a/samples/outlook/55-display-items/display-existing-message.yaml +++ b/samples/outlook/55-display-items/display-existing-message.yaml @@ -14,12 +14,12 @@ script: $("#run-async").click(runAsync); function run() { - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); Office.context.mailbox.displayMessageForm(itemId); } function runAsync() { - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); // 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-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 1e2eab1b9..6137d2d36 100644 --- a/samples/outlook/55-display-items/display-new-appointment.yaml +++ b/samples/outlook/55-display-items/display-new-appointment.yaml @@ -11,8 +11,8 @@ script: $("#run-async").click(runAsync); function run() { - var start = new Date(); - var end = new Date(); + const start = new Date(); + const end = new Date(); end.setHours(start.getHours() + 1); Office.context.mailbox.displayNewAppointmentForm({ @@ -28,8 +28,8 @@ script: } function runAsync() { - var start = new Date(); - var end = new Date(); + const start = new Date(); + const end = new Date(); end.setHours(start.getHours() + 1); // The async version is only available starting with requirement set 1.9, diff --git a/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml b/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml index ce56dfdc2..4d6327a33 100644 --- a/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml +++ b/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml @@ -53,7 +53,7 @@ script: function setSignature() { // Set the signature for the current item. - var signature = $("#signature").val(); + const signature = $("#signature").val(); console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync(signature, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -66,14 +66,14 @@ script: function setSignatureWithInlineImage() { // Set the signature for the current item with inline image. - var modIcon1Base64 = "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; + const modIcon1Base64 = "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; Office.context.mailbox.item.addFileAttachmentFromBase64Async( modIcon1Base64, "myImage.png", { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - var signature = $("#signature").val() + ""; + const signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, 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 d19d0927b..b749468be 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 @@ -40,8 +40,8 @@ script: // Determine if user has the appropriate permission to do the operation. if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_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; @@ -82,8 +82,8 @@ script: // Determine if user has the appropriate permission to do the operation. if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_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; 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 609b69f79..7b5e49dfb 100644 --- a/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml +++ b/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml @@ -10,8 +10,8 @@ script: $("#getEntitiesByType").click(getEntitiesByType); function getEntities() { - var entities = Office.context.mailbox.item.getEntities(); - var entityTypesFound = 0; + const entities = Office.context.mailbox.item.getEntities(); + let entityTypesFound = 0; if (entities.addresses.length > 0) { console.warn("physical addresses: "); console.log(entities.addresses); diff --git a/samples/outlook/75-entities-and-regex-matches/selected.yaml b/samples/outlook/75-entities-and-regex-matches/selected.yaml index 19a88dbd0..33d30150e 100644 --- a/samples/outlook/75-entities-and-regex-matches/selected.yaml +++ b/samples/outlook/75-entities-and-regex-matches/selected.yaml @@ -10,8 +10,8 @@ script: $("#getSelectedRegExMatches").click(getSelectedRegExMatches); function getSelectedEntities() { - var entities = Office.context.mailbox.item.getSelectedEntities(); - var entityTypesFound = 0; + const entities = Office.context.mailbox.item.getSelectedEntities(); + let entityTypesFound = 0; if (entities.addresses.length > 0) { console.warn("physical addresses: "); console.log(entities.addresses); @@ -54,7 +54,7 @@ script: } function getSelectedRegExMatches() { - var matches = Office.context.mailbox.item.getSelectedRegExMatches(); + const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { console.log(matches); } 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 ceb798d6e..47c43946c 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 @@ -11,12 +11,12 @@ script: function run() { Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + 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; - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open('GET', getMessageUrl); xhr.setRequestHeader("Authorization", "Bearer " + token); xhr.onload = function (e) { 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 c310ed7a5..4b167e07a 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 @@ -11,14 +11,14 @@ script: function run() { console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - var ewsId = Office.context.mailbox.item.itemId; + 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); - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); + const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); console.log("REST item ID: " + restId); - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); } language: typescript 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 06c761dc9..6efee558c 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 @@ -10,8 +10,8 @@ script: $("#run").click(run); function run() { - var ewsId = Office.context.mailbox.item.itemId; - var request = '' + + const ewsId = Office.context.mailbox.item.itemId; + const request = '' + ' ' + ' ' + ' ' + 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 c9f6f9468..c7e830764 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 @@ -10,7 +10,7 @@ script: $("#run").click(run); function run() { - var request = ''+ + const request = ''+ ' '+ ' '+ ' '+ 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 595c17a5a..2c2346afe 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 @@ -17,7 +17,7 @@ script: console.error(`Failed to get locations. Error message: ${result.error.message}`); return; } - var places = result.value; + const places = result.value; if (places && places.length > 0) { result.value.forEach(function(place) { console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); @@ -32,7 +32,7 @@ script: } function add() { - var locations = [ + const locations = [ { id: "Contoso", type: Office.MailboxEnums.LocationType.Custom @@ -52,7 +52,7 @@ script: } function remove() { - var locations = [ + const locations = [ { id: "Contoso", type: Office.MailboxEnums.LocationType.Custom 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 21bfe1be4..7a659459e 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 @@ -27,7 +27,7 @@ script: return; } - var end = result.value; // Set end to current start date and time. + const end = result.value; // Set end to current start date and time. end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. Office.context.mailbox.item.end.setAsync(end, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { 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 2ee241201..c4b7f1ccc 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 @@ -21,7 +21,7 @@ script: } function set() { - var location = "my office"; + const location = "my office"; Office.context.mailbox.item.location.setAsync(location, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); 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 122238177..05851a207 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 @@ -21,7 +21,7 @@ script: } function set() { - var start = new Date(); // Represents current date and time. + const start = new Date(); // Represents current date and time. start.setDate(start.getDate() + 2); // Add 2 days to current date. Office.context.mailbox.item.start.setAsync(start, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 64de8dcd4..25049b451 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -6452,11 +6452,11 @@ if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) + const dataKey = Object.keys(customProps)[0]; + const data = customProps[dataKey]; + for (let propertyName in data) { - var propertyValue = data[propertyName]; + let propertyValue = data[propertyName]; console.log(`${propertyName}: ${propertyValue}`); } } @@ -6472,8 +6472,8 @@ Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var text = asyncResult.value.data; - var prop = asyncResult.value.sourceProperty; + const text = asyncResult.value.data; + const prop = asyncResult.value.sourceProperty; console.log("Selected text in " + prop + ": " + text); } else { console.error(asyncResult.error); @@ -6519,8 +6519,8 @@ Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOptionalAttendees = asyncResult.value; - for (var i = 0; i < apptOptionalAttendees.length; i++) { + const apptOptionalAttendees = asyncResult.value; + for (let i = 0; i < apptOptionalAttendees.length; i++) { console.log( "Optional attendees: " + apptOptionalAttendees[i].displayName + @@ -6538,10 +6538,10 @@ // 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 - var email = $("#emailOptional") + const email = $("#emailOptional") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, function(asyncResult) { @@ -6558,7 +6558,7 @@ Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOrganizer = asyncResult.value; + const apptOrganizer = asyncResult.value; console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); } else { console.error(asyncResult.error); @@ -6572,8 +6572,8 @@ Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptRequiredAttendees = asyncResult.value; - for (var i = 0; i < apptRequiredAttendees.length; i++) { + const apptRequiredAttendees = asyncResult.value; + for (let i = 0; i < apptRequiredAttendees.length; i++) { console.log( "Required attendees: " + apptRequiredAttendees[i].displayName + @@ -6591,10 +6591,10 @@ // 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 - var email = $("#emailRequired") + const email = $("#emailRequired") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, function(asyncResult) { @@ -6609,9 +6609,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "progressIndicator", message: "Progress indicator with id = " + id @@ -6622,9 +6622,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Non-persistent informational notification message with id = " + id, @@ -6637,9 +6637,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Persistent informational notification message with id = " + id, @@ -6657,7 +6657,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -6672,7 +6672,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -6681,7 +6681,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - var attachmentUrl = $("#attachmentUrl").val(); + const attachmentUrl = $("#attachmentUrl").val(); Office.context.mailbox.item.addFileAttachmentAsync( attachmentUrl, @@ -6693,7 +6693,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - var attachmentItemId = $("#attachmentItemId").val(); + const attachmentItemId = $("#attachmentItemId").val(); Office.context.mailbox.item.addItemAttachmentAsync( attachmentItemId, @@ -6719,7 +6719,7 @@ // Set the signature for the current item with inline image. - var modIcon1Base64 = + const modIcon1Base64 = "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; Office.context.mailbox.item.addFileAttachmentFromBase64Async( @@ -6728,7 +6728,7 @@ { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - var signature = $("#signature").val() + ""; + const signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, @@ -6752,8 +6752,8 @@ console.error(result.error.message); } else { if (result.value.length > 0) { - for (var i = 0; i < result.value.length; i++) { - var attachment = result.value[i]; + for (let i = 0; i < result.value.length; i++) { + let attachment = result.value[i]; console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); } } @@ -6784,16 +6784,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - var item = Office.context.mailbox.item; + const item = Office.context.mailbox.item; - var options = {asyncContext: {currentItem: item}}; + const options = {asyncContext: {currentItem: item}}; item.getAttachmentsAsync(options, callback); function callback(result) { if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { + for (let i = 0 ; i < result.value.length ; i++) { result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } } @@ -6830,7 +6830,7 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Categories assigned to this item:"); console.log(JSON.stringify(categories)); @@ -6852,10 +6852,10 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; + const masterCategories = asyncResult.value; if (masterCategories && masterCategories.length > 0) { // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; + const categoryToAdd = [masterCategories[0].displayName]; Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully assigned category '${categoryToAdd}' to item.`); @@ -6876,10 +6876,10 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; + const categoryToRemove = [categories[0].displayName]; Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); @@ -6901,7 +6901,7 @@ Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var recurrence = asyncResult.value; + const recurrence = asyncResult.value; if (recurrence === null) { console.log("This is a single appointment."); } else { @@ -6918,7 +6918,7 @@ // Important: Can only set the recurrence pattern of an appointment series. - var currentDate = new Date(); + const currentDate = new Date(); let seriesTimeObject : Office.SeriesTime; @@ -6967,7 +6967,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - var seriesId = Office.context.mailbox.item.seriesId; + const seriesId = Office.context.mailbox.item.seriesId; if (seriesId === undefined) { @@ -7016,8 +7016,8 @@ // Determine if user has the appropriate permission to do the operation. if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_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; @@ -7126,7 +7126,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 - var start = new Date(); // Represents current date and time. + const start = new Date(); // Represents current date and time. start.setDate(start.getDate() + 2); // Add 2 days to current date. @@ -7159,7 +7159,7 @@ return; } - var end = result.value; // Set end to current start date and time. + const end = result.value; // Set end to current start date and time. end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. Office.context.mailbox.item.end.setAsync(end, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -7185,7 +7185,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 - var location = "my office"; + const location = "my office"; Office.context.mailbox.item.location.setAsync(location, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -7204,7 +7204,7 @@ console.error(`Failed to get locations. Error message: ${result.error.message}`); return; } - var places = result.value; + const places = result.value; if (places && places.length > 0) { result.value.forEach(function(place) { console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); @@ -7220,7 +7220,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 - var locations = [ + const locations = [ { id: "Contoso", type: Office.MailboxEnums.LocationType.Custom @@ -7243,7 +7243,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 - var locations = [ + const locations = [ { id: "Contoso", type: Office.MailboxEnums.LocationType.Custom @@ -7333,11 +7333,11 @@ if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) + const dataKey = Object.keys(customProps)[0]; + const data = customProps[dataKey]; + for (let propertyName in data) { - var propertyValue = data[propertyName]; + let propertyValue = data[propertyName]; console.log(`${propertyName}: ${propertyValue}`); } } @@ -7350,11 +7350,11 @@ // 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 - var apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; + const apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; console.log("Optional attendees:"); - for (var i = 0; i < apptOptionalAttendees.length; i++) { + for (let i = 0; i < apptOptionalAttendees.length; i++) { console.log( apptOptionalAttendees[i].displayName + " (" + @@ -7368,7 +7368,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 - var apptOrganizer = Office.context.mailbox.item.organizer; + const apptOrganizer = Office.context.mailbox.item.organizer; console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); @@ -7377,11 +7377,11 @@ // 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 - var apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; + const apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; console.log("Required attendees:"); - for (var i = 0; i < apptRequiredAttendees.length; i++) { + for (let i = 0; i < apptRequiredAttendees.length; i++) { console.log( apptRequiredAttendees[i].displayName + " (" + @@ -7395,9 +7395,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "progressIndicator", message: "Progress indicator with id = " + id @@ -7408,9 +7408,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Non-persistent informational notification message with id = " + id, @@ -7423,9 +7423,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Persistent informational notification message with id = " + id, @@ -7443,7 +7443,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -7458,7 +7458,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -7467,16 +7467,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - var item = Office.context.mailbox.item; + const item = Office.context.mailbox.item; - var options = {asyncContext: {currentItem: item}}; + const options = {asyncContext: {currentItem: item}}; item.getAttachmentsAsync(options, callback); function callback(result) { if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { + for (let i = 0 ; i < result.value.length ; i++) { result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } } @@ -7511,7 +7511,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml - var attachments = Office.context.mailbox.item.attachments; + const attachments = Office.context.mailbox.item.attachments; console.log(attachments); 'Office.AppointmentRead#categories:member': @@ -7521,7 +7521,7 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Categories assigned to this item:"); console.log(JSON.stringify(categories)); @@ -7543,10 +7543,10 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; + const masterCategories = asyncResult.value; if (masterCategories && masterCategories.length > 0) { // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; + const categoryToAdd = [masterCategories[0].displayName]; Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully assigned category '${categoryToAdd}' to item.`); @@ -7567,10 +7567,10 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; + const categoryToRemove = [categories[0].displayName]; Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); @@ -7590,7 +7590,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml - var recurrence = Office.context.mailbox.item.recurrence; + const recurrence = Office.context.mailbox.item.recurrence; if (recurrence === undefined) { @@ -7605,7 +7605,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - var seriesId = Office.context.mailbox.item.seriesId; + const seriesId = Office.context.mailbox.item.seriesId; if (seriesId === undefined) { @@ -7727,8 +7727,8 @@ // Determine if user has the appropriate permission to do the operation. if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_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; @@ -7753,9 +7753,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - var entities = Office.context.mailbox.item.getEntities(); + const entities = Office.context.mailbox.item.getEntities(); - var entityTypesFound = 0; + let entityTypesFound = 0; if (entities.addresses.length > 0) { console.warn("physical addresses: "); @@ -7840,9 +7840,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - var entities = Office.context.mailbox.item.getSelectedEntities(); + const entities = Office.context.mailbox.item.getSelectedEntities(); - var entityTypesFound = 0; + let entityTypesFound = 0; if (entities.addresses.length > 0) { console.warn("physical addresses: "); @@ -7896,7 +7896,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - var matches = Office.context.mailbox.item.getSelectedRegExMatches(); + const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { console.log(matches); @@ -7973,7 +7973,7 @@ console.error(`Failed to get locations. Error message: ${result.error.message}`); return; } - var places = result.value; + const places = result.value; if (places && places.length > 0) { result.value.forEach(function(place) { console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); @@ -7992,7 +7992,7 @@ // Set the signature for the current item with inline image. - var modIcon1Base64 = + const modIcon1Base64 = "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; Office.context.mailbox.item.addFileAttachmentFromBase64Async( @@ -8001,7 +8001,7 @@ { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - var signature = $("#signature").val() + ""; + const signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, @@ -8021,7 +8021,7 @@ // Set the signature for the current item. - var signature = $("#signature").val(); + const signature = $("#signature").val(); console.log(`Setting signature to "${signature}".`); @@ -8040,7 +8040,7 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Categories assigned to this item:"); console.log(JSON.stringify(categories)); @@ -8063,10 +8063,10 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; + const masterCategories = asyncResult.value; if (masterCategories && masterCategories.length > 0) { // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; + const categoryToAdd = [masterCategories[0].displayName]; Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully assigned category '${categoryToAdd}' to item.`); @@ -8088,10 +8088,10 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; + const categoryToRemove = [categories[0].displayName]; Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); @@ -8111,9 +8111,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - var propertyName = $("#propertyName").val(); + const propertyName = $("#propertyName").val(); - var propertyValue = customProps.get(propertyName); + const propertyValue = customProps.get(propertyName); $("#propertyValue").val(propertyValue); @@ -8124,9 +8124,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - var propertyName = $("#propertyName").val(); + const propertyName = $("#propertyName").val(); - var propertyValue = $("#propertyValue").val(); + const propertyValue = $("#propertyValue").val(); customProps.set(propertyName, propertyValue); @@ -8137,7 +8137,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 - var propertyName = $("#propertyName").val(); + const propertyName = $("#propertyName").val(); customProps.remove(propertyName); @@ -8152,7 +8152,7 @@ console.error(`Failed to get locations. Error message: ${result.error.message}`); return; } - var places = result.value; + const places = result.value; if (places && places.length > 0) { result.value.forEach(function(place) { console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); @@ -8169,7 +8169,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 - var locations = [ + const locations = [ { id: "Contoso", type: Office.MailboxEnums.LocationType.Custom @@ -8193,7 +8193,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 - var locations = [ + const locations = [ { id: "Contoso", type: Office.MailboxEnums.LocationType.Custom @@ -8219,7 +8219,7 @@ Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgFrom = asyncResult.value; + const msgFrom = asyncResult.value; console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); } else { console.error(asyncResult.error); @@ -8313,7 +8313,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 - var location = "my office"; + const location = "my office"; Office.context.mailbox.item.location.setAsync(location, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { @@ -8329,7 +8329,7 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Master categories:"); console.log(JSON.stringify(categories)); @@ -8344,7 +8344,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - var masterCategoriesToAdd = [ + const masterCategoriesToAdd = [ { displayName: "TestCategory", color: Office.MailboxEnums.CategoryColor.Preset0 @@ -8364,7 +8364,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - var masterCategoriesToRemove = ["TestCategory"]; + const masterCategoriesToRemove = ["TestCategory"]; Office.context.mailbox.masterCategories.removeAsync(masterCategoriesToRemove, @@ -8380,7 +8380,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); Office.context.mailbox.displayAppointmentForm(itemId); 'Office.Mailbox#displayMessageForm:member(1)': @@ -8388,7 +8388,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); Office.context.mailbox.displayMessageForm(itemId); 'Office.Mailbox#displayNewAppointmentForm:member(1)': @@ -8396,9 +8396,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml - var start = new Date(); + const start = new Date(); - var end = new Date(); + const end = new Date(); end.setHours(start.getHours() + 1); @@ -8437,7 +8437,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); // The async version will return error 9049 if the item is not found. @@ -8453,7 +8453,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-message.yaml - var itemId = $("#itemId").val(); + const itemId = $("#itemId").val(); // The async version will return error 9049 if the item is not found. @@ -8469,9 +8469,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-appointment.yaml - var start = new Date(); + const start = new Date(); - var end = new Date(); + const end = new Date(); end.setHours(start.getHours() + 1); @@ -8530,12 +8530,12 @@ Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + 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; - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open('GET', getMessageUrl); xhr.setRequestHeader("Authorization", "Bearer " + token); xhr.onload = function (e) { @@ -8549,20 +8549,20 @@ console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - var ewsId = Office.context.mailbox.item.itemId; + 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); - var restId = Office.context.mailbox.convertToRestId(ewsId, + const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); console.log("REST item ID: " + restId); - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); @@ -8573,12 +8573,12 @@ Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + 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; - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open('GET', getMessageUrl); xhr.setRequestHeader("Authorization", "Bearer " + token); xhr.onload = function (e) { @@ -8592,20 +8592,20 @@ console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - var ewsId = Office.context.mailbox.item.itemId; + 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); - var restId = Office.context.mailbox.convertToRestId(ewsId, + const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); console.log("REST item ID: " + restId); - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); @@ -8616,12 +8616,12 @@ Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function (result) { - var ewsId = Office.context.mailbox.item.itemId; - var token = result.value; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); - var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + restId; + 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; - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open('GET', getMessageUrl); xhr.setRequestHeader("Authorization", "Bearer " + token); xhr.onload = function (e) { @@ -8636,20 +8636,20 @@ console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - var ewsId = Office.context.mailbox.item.itemId; + 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); - var restId = Office.context.mailbox.convertToRestId(ewsId, + const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); console.log("REST item ID: " + restId); - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); @@ -8660,20 +8660,20 @@ console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - var ewsId = Office.context.mailbox.item.itemId; + 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); - var restId = Office.context.mailbox.convertToRestId(ewsId, + const restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); console.log("REST item ID: " + restId); - var ewsId2 = Office.context.mailbox.convertToEwsId(restId, + const ewsId2 = Office.context.mailbox.convertToEwsId(restId, Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); @@ -8714,7 +8714,7 @@ // 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 - var request = ' 0) { console.log("Master categories:"); console.log(JSON.stringify(categories)); @@ -8946,7 +8946,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - var masterCategoriesToAdd = [ + const masterCategoriesToAdd = [ { displayName: "TestCategory", color: Office.MailboxEnums.CategoryColor.Preset0 @@ -8967,7 +8967,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml - var masterCategoriesToRemove = ["TestCategory"]; + const masterCategoriesToRemove = ["TestCategory"]; Office.context.mailbox.masterCategories.removeAsync(masterCategoriesToRemove, @@ -8987,11 +8987,11 @@ if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) + const dataKey = Object.keys(customProps)[0]; + const data = customProps[dataKey]; + for (let propertyName in data) { - var propertyValue = data[propertyName]; + let propertyValue = data[propertyName]; console.log(`${propertyName}: ${propertyValue}`); } } @@ -9007,8 +9007,8 @@ Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var text = asyncResult.value.data; - var prop = asyncResult.value.sourceProperty; + const text = asyncResult.value.data; + const prop = asyncResult.value.sourceProperty; console.log("Selected text in " + prop + ": " + text); } else { console.error(asyncResult.error); @@ -9040,9 +9040,9 @@ Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgBcc = asyncResult.value; + const msgBcc = asyncResult.value; console.log("Message being blind-copied to:"); - for (var i = 0; i < msgBcc.length; i++) { + for (let i = 0; i < msgBcc.length; i++) { console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); } } else { @@ -9053,10 +9053,10 @@ // 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 - var email = $("#emailBcc") + const email = $("#emailBcc") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9072,9 +9072,9 @@ Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgCc = asyncResult.value; + const msgCc = asyncResult.value; console.log("Message being copied to:"); - for (var i = 0; i < msgCc.length; i++) { + for (let i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } } else { @@ -9085,10 +9085,10 @@ // 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 - var email = $("#emailCc") + const email = $("#emailCc") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9104,7 +9104,7 @@ Office.context.mailbox.item.from.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgFrom = asyncResult.value; + const msgFrom = asyncResult.value; console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); } else { console.error(asyncResult.error); @@ -9117,9 +9117,9 @@ Office.context.mailbox.item.to.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgTo = asyncResult.value; + const msgTo = asyncResult.value; console.log("Message being sent to:"); - for (var i = 0; i < msgTo.length; i++) { + for (let i = 0; i < msgTo.length; i++) { console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); } } else { @@ -9130,10 +9130,10 @@ // 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 - var email = $("#emailTo") + const email = $("#emailTo") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -9147,9 +9147,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "progressIndicator", message: "Progress indicator with id = " + id @@ -9160,9 +9160,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Non-persistent informational notification message with id = " + id, @@ -9175,9 +9175,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Persistent informational notification message with id = " + id, @@ -9195,7 +9195,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -9210,7 +9210,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -9219,7 +9219,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - var attachmentUrl = $("#attachmentUrl").val(); + const attachmentUrl = $("#attachmentUrl").val(); Office.context.mailbox.item.addFileAttachmentAsync( attachmentUrl, @@ -9231,7 +9231,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - var attachmentItemId = $("#attachmentItemId").val(); + const attachmentItemId = $("#attachmentItemId").val(); Office.context.mailbox.item.addItemAttachmentAsync( attachmentItemId, @@ -9257,7 +9257,7 @@ // Set the signature for the current item with inline image. - var modIcon1Base64 = + const modIcon1Base64 = "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; Office.context.mailbox.item.addFileAttachmentFromBase64Async( @@ -9266,7 +9266,7 @@ { isInline: true }, function(result) { if (result.status == Office.AsyncResultStatus.Succeeded) { - var signature = $("#signature").val() + ""; + const signature = $("#signature").val() + ""; console.log(`Setting signature to "${signature}".`); Office.context.mailbox.item.body.setSignatureAsync( signature, @@ -9290,8 +9290,8 @@ console.error(result.error.message); } else { if (result.value.length > 0) { - for (var i = 0; i < result.value.length; i++) { - var attachment = result.value[i]; + for (let i = 0; i < result.value.length; i++) { + let attachment = result.value[i]; console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); } } @@ -9322,16 +9322,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - var item = Office.context.mailbox.item; + const item = Office.context.mailbox.item; - var options = {asyncContext: {currentItem: item}}; + const options = {asyncContext: {currentItem: item}}; item.getAttachmentsAsync(options, callback); function callback(result) { if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { + for (let i = 0 ; i < result.value.length ; i++) { result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } } @@ -9368,7 +9368,7 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Categories assigned to this item:"); console.log(JSON.stringify(categories)); @@ -9390,10 +9390,10 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; + const masterCategories = asyncResult.value; if (masterCategories && masterCategories.length > 0) { // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; + const categoryToAdd = [masterCategories[0].displayName]; Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully assigned category '${categoryToAdd}' to item.`); @@ -9414,10 +9414,10 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; + const categoryToRemove = [categories[0].displayName]; Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); @@ -9437,7 +9437,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - var seriesId = Office.context.mailbox.item.seriesId; + const seriesId = Office.context.mailbox.item.seriesId; if (seriesId === undefined) { @@ -9486,8 +9486,8 @@ // Determine if user has the appropriate permission to do the operation. if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_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; @@ -9642,11 +9642,11 @@ if (result.status === Office.AsyncResultStatus.Succeeded) { console.log("Loaded following custom properties:"); customProps = result.value; - var dataKey = Object.keys(customProps)[0]; - var data = customProps[dataKey]; - for (var propertyName in data) + const dataKey = Object.keys(customProps)[0]; + const data = customProps[dataKey]; + for (let propertyName in data) { - var propertyValue = data[propertyName]; + let propertyValue = data[propertyName]; console.log(`${propertyName}: ${propertyValue}`); } } @@ -9659,11 +9659,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml - var msgCc = Office.context.mailbox.item.cc; + const msgCc = Office.context.mailbox.item.cc; console.log("Message copied to:"); - for (var i = 0; i < msgCc.length; i++) { + for (let i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } 'Office.MessageRead#from:member': @@ -9671,7 +9671,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml - var msgFrom = Office.context.mailbox.item.from; + const msgFrom = Office.context.mailbox.item.from; console.log("Message received from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); @@ -9680,7 +9680,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 - var msgSender = Office.context.mailbox.item.sender; + const msgSender = Office.context.mailbox.item.sender; console.log("Sender: " + msgSender.displayName + " (" + msgSender.emailAddress + ")"); @@ -9689,11 +9689,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml - var msgTo = Office.context.mailbox.item.to; + const msgTo = Office.context.mailbox.item.to; console.log("Message sent to:"); - for (var i = 0; i < msgTo.length; i++) { + for (let i = 0; i < msgTo.length; i++) { console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); } 'Office.MessageRead#notificationMessages:member': @@ -9701,9 +9701,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "progressIndicator", message: "Progress indicator with id = " + id @@ -9714,9 +9714,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Non-persistent informational notification message with id = " + id, @@ -9729,9 +9729,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Persistent informational notification message with id = " + id, @@ -9749,7 +9749,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -9764,7 +9764,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -9773,16 +9773,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - var item = Office.context.mailbox.item; + const item = Office.context.mailbox.item; - var options = {asyncContext: {currentItem: item}}; + const options = {asyncContext: {currentItem: item}}; item.getAttachmentsAsync(options, callback); function callback(result) { if (result.value.length > 0) { - for (i = 0 ; i < result.value.length ; i++) { + for (let i = 0 ; i < result.value.length ; i++) { result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } } @@ -9817,7 +9817,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachments-read.yaml - var attachments = Office.context.mailbox.item.attachments; + const attachments = Office.context.mailbox.item.attachments; console.log(attachments); 'Office.MessageRead#categories:member': @@ -9827,7 +9827,7 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { console.log("Categories assigned to this item:"); console.log(JSON.stringify(categories)); @@ -9849,10 +9849,10 @@ Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var masterCategories = asyncResult.value; + const masterCategories = asyncResult.value; if (masterCategories && masterCategories.length > 0) { // Grab the first category from the master list. - var categoryToAdd = [masterCategories[0].displayName]; + const categoryToAdd = [masterCategories[0].displayName]; Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully assigned category '${categoryToAdd}' to item.`); @@ -9873,10 +9873,10 @@ Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var categories = asyncResult.value; + const categories = asyncResult.value; if (categories && categories.length > 0) { // Grab the first category assigned to this item. - var categoryToRemove = [categories[0].displayName]; + const categoryToRemove = [categories[0].displayName]; Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); @@ -9896,7 +9896,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml - var recurrence = Office.context.mailbox.item.recurrence; + const recurrence = Office.context.mailbox.item.recurrence; if (recurrence === undefined) { @@ -9911,7 +9911,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - var seriesId = Office.context.mailbox.item.seriesId; + const seriesId = Office.context.mailbox.item.seriesId; if (seriesId === undefined) { @@ -10033,8 +10033,8 @@ // Determine if user has the appropriate permission to do the operation. if ((delegatePermissions & Office.MailboxEnums.DelegatePermissions.Read) != 0) { - var ewsId = Office.context.mailbox.item.itemId; - var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_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; @@ -10059,9 +10059,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - var entities = Office.context.mailbox.item.getEntities(); + const entities = Office.context.mailbox.item.getEntities(); - var entityTypesFound = 0; + let entityTypesFound = 0; if (entities.addresses.length > 0) { console.warn("physical addresses: "); @@ -10146,9 +10146,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - var entities = Office.context.mailbox.item.getSelectedEntities(); + const entities = Office.context.mailbox.item.getSelectedEntities(); - var entityTypesFound = 0; + let entityTypesFound = 0; if (entities.addresses.length > 0) { console.warn("physical addresses: "); @@ -10202,7 +10202,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - var matches = Office.context.mailbox.item.getSelectedRegExMatches(); + const matches = Office.context.mailbox.item.getSelectedRegExMatches(); if (matches) { console.log(matches); @@ -10313,9 +10313,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "progressIndicator", message: "Progress indicator with id = " + id @@ -10326,9 +10326,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Non-persistent informational notification message with id = " + id, @@ -10341,9 +10341,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "informationalMessage", message: "Persistent informational notification message with id = " + id, @@ -10356,9 +10356,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); - var details = + const details = { type: "errorMessage", message: "Error notification message with id = " + id @@ -10376,7 +10376,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.replaceAsync( id, @@ -10392,7 +10392,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - var id = $("#notificationId").val(); + const id = $("#notificationId").val(); Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); @@ -10403,7 +10403,7 @@ Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOrganizer = asyncResult.value; + const apptOrganizer = asyncResult.value; console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); } else { console.error(asyncResult.error); @@ -10416,9 +10416,9 @@ Office.context.mailbox.item.bcc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgBcc = asyncResult.value; + const msgBcc = asyncResult.value; console.log("Message being blind-copied to:"); - for (var i = 0; i < msgBcc.length; i++) { + for (let i = 0; i < msgBcc.length; i++) { console.log(msgBcc[i].displayName + " (" + msgBcc[i].emailAddress + ")"); } } else { @@ -10431,9 +10431,9 @@ Office.context.mailbox.item.cc.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgCc = asyncResult.value; + const msgCc = asyncResult.value; console.log("Message being copied to:"); - for (var i = 0; i < msgCc.length; i++) { + for (let i = 0; i < msgCc.length; i++) { console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } } else { @@ -10447,8 +10447,8 @@ Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptOptionalAttendees = asyncResult.value; - for (var i = 0; i < apptOptionalAttendees.length; i++) { + const apptOptionalAttendees = asyncResult.value; + for (let i = 0; i < apptOptionalAttendees.length; i++) { console.log( "Optional attendees: " + apptOptionalAttendees[i].displayName + @@ -10469,8 +10469,8 @@ Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var apptRequiredAttendees = asyncResult.value; - for (var i = 0; i < apptRequiredAttendees.length; i++) { + const apptRequiredAttendees = asyncResult.value; + for (let i = 0; i < apptRequiredAttendees.length; i++) { console.log( "Required attendees: " + apptRequiredAttendees[i].displayName + @@ -10490,9 +10490,9 @@ Office.context.mailbox.item.to.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var msgTo = asyncResult.value; + const msgTo = asyncResult.value; console.log("Message being sent to:"); - for (var i = 0; i < msgTo.length; i++) { + for (let i = 0; i < msgTo.length; i++) { console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); } } else { @@ -10504,10 +10504,10 @@ // 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 - var email = $("#emailBcc") + const email = $("#emailBcc") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.bcc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -10520,10 +10520,10 @@ // 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 - var email = $("#emailCc") + const email = $("#emailCc") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -10536,10 +10536,10 @@ // 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 - var email = $("#emailOptional") + const email = $("#emailOptional") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, function(asyncResult) { @@ -10553,10 +10553,10 @@ // 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 - var email = $("#emailRequired") + const email = $("#emailRequired") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, function(asyncResult) { @@ -10570,10 +10570,10 @@ // 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 - var email = $("#emailTo") + const email = $("#emailTo") .val() .toString(); - var emailArray = [email]; + const emailArray = [email]; Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -10589,7 +10589,7 @@ Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - var recurrence = asyncResult.value; + const recurrence = asyncResult.value; if (recurrence === null) { console.log("This is a single appointment."); } else { @@ -10607,7 +10607,7 @@ // Important: Can only set the recurrence pattern of an appointment series. - var currentDate = new Date(); + const currentDate = new Date(); let seriesTimeObject : Office.SeriesTime; @@ -10656,9 +10656,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml - var settingName = $("#settingName").val(); + const settingName = $("#settingName").val(); - var settingValue = Office.context.roamingSettings.get(settingName); + const settingValue = Office.context.roamingSettings.get(settingName); $("#settingValue").val(settingValue); @@ -10668,9 +10668,9 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml - var settingName = $("#settingName").val(); + const settingName = $("#settingName").val(); - var settingValue = $("#settingValue").val(); + const settingValue = $("#settingValue").val(); Office.context.roamingSettings.set(settingName, settingValue); @@ -10801,7 +10801,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 - var start = new Date(); // Represents current date and time. + const start = new Date(); // Represents current date and time. start.setDate(start.getDate() + 2); // Add 2 days to current date. @@ -10822,7 +10822,7 @@ return; } - var end = result.value; // Set end to current start date and time. + const end = result.value; // Set end to current start date and time. end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. Office.context.mailbox.item.end.setAsync(end, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { From 1c19ec58c5253ed169ece1dd51d3f470ac2bac03 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 26 Jul 2022 11:38:03 -0700 Subject: [PATCH 096/336] [All hosts] (var) Replace var to let or const in JS snippets (#671) --- .../excel/20-chart/chart-title-ts.yaml | 4 +-- samples/excel/10-chart/chart-formatting.yaml | 6 ++-- .../30-events/events-disable-events.yaml | 8 ++--- samples/excel/42-range/precedents.yaml | 4 +-- .../workbook-insert-external-worksheets.yaml | 2 +- .../excel/99-just-for-fun/color-wheel.yaml | 8 ++--- samples/excel/99-just-for-fun/patterns.yaml | 6 ++-- samples/excel/99-just-for-fun/tetrominos.yaml | 8 ++--- samples/powerpoint/basics/insert-svg.yaml | 2 +- samples/powerpoint/shapes/shapes.yaml | 24 +++++++-------- samples/word/20-lists/insert-list.yaml | 4 +-- ...read-write-custom-document-properties.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 4 +-- snippet-extractor-output/snippets.yaml | 30 +++++++++---------- 14 files changed, 56 insertions(+), 56 deletions(-) diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 29e777b3b..5c0ab8e2f 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -14,7 +14,7 @@ script: async function setTitle() { await Excel.run(async (ctx) => { - var chart = ctx.workbook.worksheets.getItem("Sample").charts.getItem("Chart1"); + const chart = ctx.workbook.worksheets.getItem("Sample").charts.getItem("Chart1"); chart.title.text = "My Chart"; chart.title.visible = true; @@ -28,7 +28,7 @@ script: async function getTitle() { await Excel.run(async (ctx) => { - var chart = ctx.workbook.worksheets.getItem("Sample").charts.getItem("Chart1"); + const chart = ctx.workbook.worksheets.getItem("Sample").charts.getItem("Chart1"); chart.load('title/text'); await ctx.sync(); diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 74cbe8706..319878a32 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -60,7 +60,7 @@ script: pointsLoaded = series.points.count; } - for (var j = 0; j < pointsLoaded; j++) { + for (let j = 0; j < pointsLoaded; j++) { // the colors assume "Format chart" has been pressed series.points.getItemAt(j).markerBackgroundColor = "#404040"; series.points.getItemAt(j).markerForegroundColor = "#404040"; @@ -84,7 +84,7 @@ script: await context.sync(); // color everything grey before highlighting spokes - for (var i = 0; i < chart.series.count; i++) { + for (let i = 0; i < chart.series.count; i++) { chart.series.getItemAt(i).format.line.color = "#636363"; chart.series.getItemAt(i).dataLabels.format.font.color = "#636363"; } @@ -106,7 +106,7 @@ script: charts.load("count"); await context.sync(); - for (var i = 0; i < charts.count; i++) { + for (let i = 0; i < charts.count; i++) { charts.getItemAt(0).delete(); } await context.sync(); diff --git a/samples/excel/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index c17486240..b97d09ca1 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -38,7 +38,7 @@ script: await context.sync(); // add an event handler to each cell in the sum range - for (var i = 0; i < sumRange.columnCount; i++) { + for (let i = 0; i < sumRange.columnCount; i++) { let sumBinding = context.workbook.bindings.add(sumRange.getCell(0,i), Excel.BindingType.range, "SumBinding" + i); sumBinding.onDataChanged.add(onSumChanged); } @@ -87,8 +87,8 @@ script: await context.sync(); // fill the range with random numbers - for (var i = 0; i < dataRange.rowCount; i++) { - for (var j = 0; j < dataRange.columnCount; j++) { + for (let i = 0; i < dataRange.rowCount; i++) { + for (let j = 0; j < dataRange.columnCount; j++) { dataRange.getCell(i, j).values = [[Math.round(Math.random() * 100)]]; } } @@ -108,7 +108,7 @@ script: sumRange.load(["columnCount"]); await context.sync(); - for (var i = 0; i < sumRange.columnCount; i++) { + for (let i = 0; i < sumRange.columnCount; i++) { const formulaCell = sumRange.getCell(0, i); const startAddressCell = dataRange.getCell(0, i); const endAddressCell = dataRange.getCell(dataRange.rowCount - 1, i); diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 6dc28b529..26988d156 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -55,7 +55,7 @@ script: console.log(`Direct precedent cells of ${range.address}:`); // Use the direct precedents API to loop through precedents of the active cell. - for (var i = 0; i < directPrecedents.areas.items.length; i++) { + 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}`); @@ -76,7 +76,7 @@ script: console.log(`All precedent cells of ${range.address}:`); // Use the precedents API to loop through precedents of the active cell. - for (var i = 0; i < precedents.areas.items.length; i++) { + 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}`); diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 35210ad38..040035f5d 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -33,7 +33,7 @@ script: const workbook = context.workbook; // Set up the insert options. - var 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`. diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index b63475a5b..2bc0828c5 100644 --- a/samples/excel/99-just-for-fun/color-wheel.yaml +++ b/samples/excel/99-just-for-fun/color-wheel.yaml @@ -52,7 +52,7 @@ script: theWheel.legend.visible = false; let points = theWheel.series.getItemAt(0).points; - for (var i = 0; i < numberOfSlices; i++) { + for (let i = 0; i < numberOfSlices; i++) { points.getItemAt(i).format.fill.setSolidColor("black") } @@ -86,13 +86,13 @@ script: } async function loopThroughColors(points: Excel.ChartPointsCollection, max, colorGenerator: (i: number) => string) { - for (var i = 0; i < max; i++) { + for (let i = 0; i < max; i++) { if (isStopped) { return; } - var X = i % numberOfSlices; + let X = i % numberOfSlices; await pause(pauseLength); - var color = colorGenerator(i); + let color = colorGenerator(i); points.getItemAt(X).format.fill.setSolidColor(color); await points.context.sync(); } diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 282e7cbaf..ebdf9d0ee 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -22,7 +22,7 @@ script: const size = parseInt($("#size").val() as string); - for (var i = 0; i < size; i++) { + for (let i = 0; i < size; i++) { const width = size * 2 - 2 * i; const colors = [ rgb(30 + Math.floor(225 / size * i), 0, 0), @@ -108,13 +108,13 @@ script: const size = Math.floor(parseInt($("#size").val() as string) / 2); - for (var i = 0; i < size; i++) { + for (let i = 0; i < size; i++) { const range1 = sheet.getCell(2 * i + 1, 2 * i + 1).getResizedRange(size - i, size - i); const range2 = sheet.getCell(2 * i + 1, 3 * size - i).getResizedRange(size - i, size - i); const range3 = sheet.getCell(3 * size - i, 2 * i + 1).getResizedRange(size - i, size - i); const range4 = sheet.getCell(3 * size - i, 3 * size - i).getResizedRange(size - i, size - i); - var colorFactor = 255 - Math.floor(200 / size * i) + let colorFactor = 255 - Math.floor(200 / size * i) range1.format.fill.color = rgb(colorFactor, 255 - colorFactor, 0); range2.format.fill.color = rgb(colorFactor, 255 - colorFactor, 0); range3.format.fill.color = rgb(colorFactor, 255 - colorFactor, 0); diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 19ee7a37f..15d2f69a1 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -171,9 +171,9 @@ script: this.pieceY = 0; this.pieceX = NUM_COLS / 2 - 2; this.rows = []; - for (var i = 0; i < NUM_ROWS; i++) { + for (let i = 0; i < NUM_ROWS; i++) { this.rows[i] = []; - for (var j = 0; j < NUM_COLS; j++) { + for (let j = 0; j < NUM_COLS; j++) { this.rows[i][j] = 0; } } @@ -187,9 +187,9 @@ script: this.pieceY = 0; this.pieceX = NUM_COLS / 2 - 2; this.rows = []; - for (var i = 0; i < NUM_ROWS; i++) { + for (let i = 0; i < NUM_ROWS; i++) { this.rows[i] = []; - for (var j = 0; j < NUM_COLS; j++) { + for (let j = 0; j < NUM_COLS; j++) { this.rows[i][j] = 0; } } diff --git a/samples/powerpoint/basics/insert-svg.yaml b/samples/powerpoint/basics/insert-svg.yaml index 45403aab4..40cf28a52 100644 --- a/samples/powerpoint/basics/insert-svg.yaml +++ b/samples/powerpoint/basics/insert-svg.yaml @@ -27,7 +27,7 @@ script: // A production add-in code could get an image from an // online source and pass it to a library function that // converts to base 64. - var svg = " SVG Logo SVG "; + const svg = " SVG Logo SVG "; return svg; } language: typescript diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index 1bec35b21..b8c93987a 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -18,8 +18,8 @@ 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) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; - var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, + const shapes = context.presentation.slides.getItemAt(0).shapes; + const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, { left: 100, top: 100, @@ -36,8 +36,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) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; - var hexagon = shapes.getItemAt(0); + const shapes = context.presentation.slides.getItemAt(0).shapes; + const hexagon = shapes.getItemAt(0); hexagon.height = 50; hexagon.width = 50; @@ -49,8 +49,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) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; - var hexagon = shapes.getItemAt(0); + const shapes = context.presentation.slides.getItemAt(0).shapes; + const hexagon = shapes.getItemAt(0); hexagon.top = 50; hexagon.left = 150; @@ -63,11 +63,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) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; + 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. - var line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -85,8 +85,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) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; - var textbox = shapes.addTextBox("Hello!", + const shapes = context.presentation.slides.getItemAt(0).shapes; + const textbox = shapes.addTextBox("Hello!", { left: 100, top: 300, @@ -105,8 +105,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) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; - var braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { + const shapes = context.presentation.slides.getItemAt(0).shapes; + const braces = shapes.addGeometricShape(PowerPoint.GeometricShapeType.bracePair, { left: 100, top: 400, height: 50, diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index c1478883f..9e529e5ff 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -19,7 +19,7 @@ script: await context.sync(); - var list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. + const list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. list.load("$none"); // No properties needed. await context.sync(); @@ -27,7 +27,7 @@ script: // To add new items to the list use start/end on the insert location parameter. list.insertParagraph("New list item on top of the list", "Start"); let paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); - paragraph.listItem.level = 4; // Sets up list level for the lsit item. + paragraph.listItem.level = 4; // Sets up list level for the list item. // To add paragraphs outside the list use before/after: list.insertParagraph("New paragraph goes after (not part of the list)", "After"); 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 6a933e24c..f8ea8b077 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -36,7 +36,7 @@ script: properties.load("key,type,value"); await context.sync(); - for (var i = 0; i < properties.items.length; i++) + 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); }); } diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 6ecee3ef0..32ce75274 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -71,9 +71,9 @@ script: await context.sync(); if (customerContentControls.items.length === 0) { - for (var i = 0; i < results.items.length; i++) { + for (let i = 0; i < results.items.length; i++) { results.items[i].font.bold = true; - var cc = results.items[i].insertContentControl(); + let cc = results.items[i].insertContentControl(); cc.tag = "customer"; // This value is used in the next step of this sample. cc.title = "Customer Name " + i; } diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 25049b451..72e39b27d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -3810,7 +3810,7 @@ console.log(`Direct precedent cells of ${range.address}:`); // Use the direct precedents API to loop through precedents of the active cell. - for (var i = 0; i < directPrecedents.areas.items.length; i++) { + 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}`); @@ -3833,7 +3833,7 @@ console.log(`All precedent cells of ${range.address}:`); // Use the precedents API to loop through precedents of the active cell. - for (var i = 0; i < precedents.areas.items.length; i++) { + 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}`); @@ -5577,7 +5577,7 @@ const workbook = context.workbook; // Set up the insert options. - var 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`. @@ -5674,7 +5674,7 @@ console.log(`Direct precedent cells of ${range.address}:`); // Use the direct precedents API to loop through precedents of the active cell. - for (var i = 0; i < directPrecedents.areas.items.length; i++) { + 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}`); @@ -10998,8 +10998,8 @@ // location and size. Then it names the shape. await PowerPoint.run(async (context) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; - var hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, + const shapes = context.presentation.slides.getItemAt(0).shapes; + const hexagon = shapes.addGeometricShape(PowerPoint.GeometricShapeType.hexagon, { left: 100, top: 100, @@ -11022,11 +11022,11 @@ // start and end points. Then it names the shape. await PowerPoint.run(async (context) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; + 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. - var line = shapes.addLine(PowerPoint.ConnectorType.straight, + const line = shapes.addLine(PowerPoint.ConnectorType.straight, { left: 400, top: 200, @@ -11049,8 +11049,8 @@ // location, and size. Then it names the text box. await PowerPoint.run(async (context) => { - var shapes = context.presentation.slides.getItemAt(0).shapes; - var textbox = shapes.addTextBox("Hello!", + const shapes = context.presentation.slides.getItemAt(0).shapes; + const textbox = shapes.addTextBox("Hello!", { left: 100, top: 300, @@ -11697,7 +11697,7 @@ properties.load("key,type,value"); await context.sync(); - for (var i = 0; i < properties.items.length; i++) + 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.Document#changeTrackingMode:member': @@ -12096,7 +12096,7 @@ await context.sync(); - var list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. + const list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. list.load("$none"); // No properties needed. await context.sync(); @@ -12104,7 +12104,7 @@ // To add new items to the list use start/end on the insert location parameter. list.insertParagraph("New list item on top of the list", "Start"); let paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); - paragraph.listItem.level = 4; // Sets up list level for the lsit item. + paragraph.listItem.level = 4; // Sets up list level for the list item. // To add paragraphs outside the list use before/after: list.insertParagraph("New paragraph goes after (not part of the list)", "After"); @@ -12292,9 +12292,9 @@ await context.sync(); if (customerContentControls.items.length === 0) { - for (var i = 0; i < results.items.length; i++) { + for (let i = 0; i < results.items.length; i++) { results.items[i].font.bold = true; - var cc = results.items[i].insertContentControl(); + let cc = results.items[i].insertContentControl(); cc.tag = "customer"; // This value is used in the next step of this sample. cc.title = "Customer Name " + i; } From bdf858a775bb45764a9fa76b0304eea957907e54 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 26 Jul 2022 14:45:41 -0700 Subject: [PATCH 097/336] [Outlook] Fix name to AppointmentSensitivityType (#673) --- snippet-extractor-metadata/outlook.xlsx | Bin 21259 -> 21265 bytes snippet-extractor-output/snippets.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 3d78ce8c542d7aee2a39e58bd6e3c87829b5adf9..37e5c850611118fe308415fbfac3df529ee81d16 100644 GIT binary patch delta 9773 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 awNQI)$rooO+7f^Z=#DlsI+6N+UH%_bWY~`Y diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 72e39b27d..aade26412 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -8763,7 +8763,7 @@ console.log(result.value); } }); -'Office.MailboxEnums.AppointmentSensitivity:enum': +'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 From fdaf371102e7379cf9ca34c07c9554c396907668 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 1 Aug 2022 12:52:39 -0700 Subject: [PATCH 098/336] [Outlook] (compose) Snippet to add inline base64 image to message body (#675) * Create sample to add inline base64 image to message body * Fix code format --- playlists-prod/outlook.yaml | 9 ++ playlists/outlook.yaml | 9 ++ .../20-item-body/add-inline-base64-image.yaml | 82 +++++++++++++++++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 5 files changed, 102 insertions(+) create mode 100644 samples/outlook/20-item-body/add-inline-base64-image.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index c4101cd58..18debb0e5 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -37,6 +37,15 @@ group: Item Body api_set: Mailbox: '1.1' +- id: outlook-item-body-add-inline-base64-image + name: Add inline base64 image to message body (Compose) + fileName: add-inline-base64-image.yaml + description: Add an inline base64 image to the body of a message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml + group: Item Body + api_set: + Mailbox: '1.8' - id: outlook-item-save-and-close-close name: Close the item fileName: close.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 4be35c1f5..b6f5748d2 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -37,6 +37,15 @@ group: Item Body api_set: Mailbox: '1.1' +- id: outlook-item-body-add-inline-base64-image + name: Add inline base64 image to message body (Compose) + fileName: add-inline-base64-image.yaml + description: Add an inline base64 image to the body of a message being composed. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/add-inline-base64-image.yaml + group: Item Body + api_set: + Mailbox: '1.8' - id: outlook-item-save-and-close-close name: Close the item fileName: close.yaml diff --git a/samples/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml new file mode 100644 index 000000000..2ed246269 --- /dev/null +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -0,0 +1,82 @@ +order: 3 +id: outlook-item-body-add-inline-base64-image +name: Add inline base64 image to message body (Compose) +description: Add an inline base64 image to the body of a message being composed. +host: OUTLOOK +api_set: + Mailbox: '1.8' +script: + content: | + $("#add-image").click(addImage); + + 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=="; + + // Get the current body of the message. + mailItem.body.getAsync(Office.CoercionType.Html, (bodyResult) => { + if (bodyResult.status === Office.AsyncResultStatus.Succeeded) { + // Insert the base64 image to the beginning of the message 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 image added to message."); + } else { + console.log(setResult.error.message); + } + }); + } else { + console.log(attachResult.error.message); + } + }); + } else { + console.log(bodyResult.error.message); + } + }); + } + language: typescript +template: + content: |- +

+

This sample adds an inline base64 image to the body of the message 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/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/outlook.json b/view-prod/outlook.json index dd8afa300..d5ee7df29 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -3,6 +3,7 @@ "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml", + "outlook-item-body-add-inline-base64-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.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-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", diff --git a/view/outlook.json b/view/outlook.json index e2d6d3fcd..4098623f7 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -3,6 +3,7 @@ "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/get-selected-data.yaml", "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/set-selected-data.yaml", + "outlook-item-body-add-inline-base64-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/add-inline-base64-image.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-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", From 11b9f0643a618b6661bf4373536f55285673e325 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 3 Aug 2022 14:24:29 -0700 Subject: [PATCH 099/336] [Outlook] (compose) Clean up HTML code and update sample description (#677) --- playlists-prod/outlook.yaml | 6 ++++-- playlists/outlook.yaml | 6 ++++-- .../20-item-body/add-inline-base64-image.yaml | 20 +++++++++---------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 18debb0e5..e410f7a52 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -38,9 +38,11 @@ api_set: Mailbox: '1.1' - id: outlook-item-body-add-inline-base64-image - name: Add inline base64 image to message body (Compose) + name: Add inline base64 image to message or appointment body (Compose) fileName: add-inline-base64-image.yaml - description: Add an inline base64 image to the body of a message being composed. + description: >- + Add an inline base64 image to the body of a message or appointment being + composed. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml group: Item Body diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index b6f5748d2..3f30ff02e 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -38,9 +38,11 @@ api_set: Mailbox: '1.1' - id: outlook-item-body-add-inline-base64-image - name: Add inline base64 image to message body (Compose) + name: Add inline base64 image to message or appointment body (Compose) fileName: add-inline-base64-image.yaml - description: Add an inline base64 image to the body of a message being composed. + description: >- + Add an inline base64 image to the body of a message or appointment being + composed. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/add-inline-base64-image.yaml group: Item Body 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 2ed246269..c6c379afc 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -1,7 +1,7 @@ order: 3 id: outlook-item-body-add-inline-base64-image -name: Add inline base64 image to message body (Compose) -description: Add an inline base64 image to the body of a message being composed. +name: Add inline base64 image to message or appointment body (Compose) +description: Add an inline base64 image to the body of a message or appointment being composed. host: OUTLOOK api_set: Mailbox: '1.8' @@ -14,10 +14,10 @@ script: 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=="; - // Get the current body of the message. + // 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 image to the beginning of the message body. + // Insert the base64 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) { @@ -26,7 +26,7 @@ script: mailItem.body.setAsync(body, { coercionType: Office.CoercionType.Html }, (setResult) => { if (setResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Inline base64 image added to message."); + console.log("Inline base64 image added to the body."); } else { console.log(setResult.error.message); } @@ -43,15 +43,15 @@ script: language: typescript template: content: |- -
-

This sample adds an inline base64 image to the body of the message being composed.

+
+

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

Required mode: Compose

-
+

Try it out

-
language: html From a2b22f4237747429c3cecf88bc2357a6c50db4f6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 3 Aug 2022 15:04:21 -0700 Subject: [PATCH 100/336] [Word] Clean up let/const usage and comments (#678) --- .../15-images/insert-and-get-pictures.yaml | 12 +- samples/word/20-lists/insert-list.yaml | 4 +- .../get-paragraph-on-insertion-point.yaml | 6 +- samples/word/25-paragraph/get-word-count.yaml | 2 +- .../25-paragraph/insert-formatted-text.yaml | 6 +- .../insert-in-different-locations.yaml | 10 +- samples/word/25-paragraph/search.yaml | 4 +- .../get-built-in-properties.yaml | 2 +- ...read-write-custom-document-properties.yaml | 2 +- .../split-words-of-first-paragraph.yaml | 4 +- samples/word/40-tables/table-cell-access.yaml | 6 +- .../50-document/insert-section-breaks.yaml | 8 +- .../50-document/manage-change-tracking.yaml | 12 +- samples/word/50-document/manage-comments.yaml | 48 ++--- .../word/50-document/manage-footnotes.yaml | 36 ++-- samples/word/90-scenarios/doc-assembly.yaml | 28 +-- .../content-control-ondeleted-event.yaml | 6 +- snippet-extractor-output/snippets.yaml | 177 +++++++++++------- 18 files changed, 210 insertions(+), 163 deletions(-) diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 4c166b1b8..8086a869e 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -12,10 +12,8 @@ script: $("#insert").click(() => tryCatch(insertImage)); $("#get").click(() => tryCatch(getImage)); - /** - * Inserts an image anchored to the last paragraph. - */ async function insertImage() { + // Inserts an image anchored to the last paragraph. await Word.run(async (context) => { context.document.body.paragraphs .getLast() @@ -26,10 +24,8 @@ script: }); } - /** - * Get the first image in the document. - */ async function getImage() { + // Get the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); firstPicture.load("width, height"); @@ -44,10 +40,8 @@ script: }); } - /** - * Setup by adding a dummy paragraph. - */ async function setup() { + // Setup by adding a dummy paragraph. await Word.run(async (context) => { const body = context.document.body; body.clear(); diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 9e529e5ff..c470fc547 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -14,7 +14,7 @@ script: async function insertList() { // This example starts a new list stating with the second paragraph. await Word.run(async (context) => { - let paragraphs = context.document.body.paragraphs; + const paragraphs = context.document.body.paragraphs; paragraphs.load("$none"); // No properties needed. await context.sync(); @@ -26,7 +26,7 @@ script: // To add new items to the list use start/end on the insert location parameter. list.insertParagraph("New list item on top of the list", "Start"); - let paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); + const paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); paragraph.listItem.level = 4; // Sets up list level for the list item. // To add paragraphs outside the list use before/after: list.insertParagraph("New paragraph goes after (not part of the list)", "After"); 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 17ff36bd9..54d5b3b8c 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -15,7 +15,7 @@ script: async function getParagraph() { await Word.run(async (context) => { // The collection of paragraphs of the current selection returns the full paragraphs contained in it. - let paragraph = context.document.getSelection().paragraphs.getFirst(); + const paragraph = context.document.getSelection().paragraphs.getFirst(); paragraph.load("text"); await context.sync(); @@ -26,14 +26,14 @@ script: async function getSentences() { await Word.run(async (context) => { // Gets the complete sentence (as range) associated with the insertion point. - let sentences = context.document + const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); // Expands the range to the end of the paragraph to get all the complete sentences. - let sentencesToTheEndOfParagraph = sentences.items[0] + const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( context.document diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 24f05f299..2e75557b9 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -13,7 +13,7 @@ script: async function run() { await Word.run(async (context) => { - let paragraphs = context.document.body.paragraphs; + const paragraphs = context.document.body.paragraphs; paragraphs.load("text"); await context.sync(); diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 889aa2965..09644894a 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -17,7 +17,7 @@ script: // Insert the sentence, then adjust the formatting. // Note that replace affects the calling object, in this case the entire document body. // A similar method can also be used at the range level. - let sentence = context.document.body.insertText( + const sentence = context.document.body.insertText( "This is some formatted text!", "Replace" ); @@ -34,7 +34,7 @@ script: async function addFormattedParagraph() { await Word.run(async (context) => { // Second sentence, let's insert it as a paragraph after the previously inserted one. - let secondSentence = context.document.body.insertParagraph( + const secondSentence = context.document.body.insertParagraph( "This is the first text with a custom style.", "End" ); @@ -52,7 +52,7 @@ script: async function addPreStyledFormattedText() { await Word.run(async (context) => { - let sentence = context.document.body.insertParagraph( + const sentence = context.document.body.insertParagraph( "To be or not to be", "End" ); diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 791452d49..d92558904 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -18,7 +18,7 @@ script: async function before() { await Word.run(async (context) => { // Let's insert before the first paragraph. - let range = context.document.body.paragraphs.getFirst().insertParagraph("This is Before", "Before"); + const range = context.document.body.paragraphs.getFirst().insertParagraph("This is Before", "Before"); range.font.highlightColor = "yellow"; await context.sync(); @@ -29,7 +29,7 @@ script: await Word.run(async (context) => { // This button assumes before() ran. // Get the next paragraph and insert text at the beginning. Note that there are invalid locations depending on the object. For instance, insertParagraph and "before" on a paragraph object is not a valid combination. - let range = context.document.body.paragraphs + const range = context.document.body.paragraphs .getFirst() .getNext() .insertText("This is Start", "Start"); @@ -43,7 +43,7 @@ script: async function end() { await Word.run(async (context) => { // Insert text at the end of a paragraph. - let range = context.document.body.paragraphs + const range = context.document.body.paragraphs .getFirst() .getNext() .insertText(" This is End", "End"); @@ -57,7 +57,7 @@ script: async function after() { await Word.run(async (context) => { // Insert a paragraph after an existing one. - let range = context.document.body.paragraphs + const range = context.document.body.paragraphs .getFirst() .getNext() .insertParagraph("This is After", "After"); @@ -71,7 +71,7 @@ script: async function replace() { await Word.run(async (context) => { // Replace the last paragraph. - let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); + const range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); range.font.highlightColor = "black"; range.font.color = "white"; diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 0f7d546a1..b235182ff 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -14,7 +14,7 @@ script: async function basicSearch() { await Word.run(async (context) => { - let results = context.document.body.search("Online"); + const results = context.document.body.search("Online"); results.load("length"); await context.sync(); @@ -32,7 +32,7 @@ script: await Word.run(async (context) => { // Check out how wildcard expression are built, also use the second parameter of the search method to include search modes // (i.e. use wildcards). - let results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); + const results = 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 1977ac9cf..040586d3a 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) => { - let builtInProperties = context.document.properties; + const builtInProperties = context.document.properties; builtInProperties.load("*"); // Let's get all! await context.sync(); 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 f8ea8b077..8ad8b6db3 100644 --- a/samples/word/30-properties/read-write-custom-document-properties.yaml +++ b/samples/word/30-properties/read-write-custom-document-properties.yaml @@ -32,7 +32,7 @@ script: async function readCustomDocumentProperties() { await Word.run(async (context) => { - let properties = context.document.properties.customProperties; + const properties = context.document.properties.customProperties; properties.load("key,type,value"); await context.sync(); 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 dca0ff1df..2d455b976 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -13,8 +13,8 @@ script: async function highlightWords() { await Word.run(async (context) => { - let paragraph = context.document.body.paragraphs.getFirst(); - let words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); + const paragraph = context.document.body.paragraphs.getFirst(); + const words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); words.load("text"); await context.sync(); diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 265b537e1..867ddbce4 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -13,7 +13,7 @@ script: async function getTableCell() { await Word.run(async (context) => { - let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; + const firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; firstCell.load("text"); await context.sync(); @@ -24,11 +24,11 @@ script: async function insertTable() { await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. - let data = [ + const data = [ ["Tokyo", "Beijing", "Seattle"], ["Apple", "Orange", "Pineapple"] ]; - let table = context.document.body.insertTable(2, 3, "Start", data); + const table = context.document.body.insertTable(2, 3, "Start", data); table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; table.styleFirstColumn = false; diff --git a/samples/word/50-document/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index 19fd51a2f..3e9359d19 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -16,7 +16,7 @@ script: async function addNext() { // Inserts a section break on the next page. await Word.run(async (context) => { - let body = context.document.body; + const body = context.document.body; body.insertBreak(Word.BreakType.sectionNext, Word.InsertLocation.end); await context.sync(); @@ -28,7 +28,7 @@ script: async function addEven() { // Inserts a section break on the next even page. await Word.run(async (context) => { - let body = context.document.body; + const body = context.document.body; body.insertBreak(Word.BreakType.sectionEven, Word.InsertLocation.end); await context.sync(); @@ -40,7 +40,7 @@ script: async function addOdd() { // Inserts a section break on the next odd page. await Word.run(async (context) => { - let body = context.document.body; + const body = context.document.body; body.insertBreak(Word.BreakType.sectionOdd, Word.InsertLocation.end); await context.sync(); @@ -52,7 +52,7 @@ script: async function addContinuous() { // Inserts a section without an associated page break. await Word.run(async (context) => { - let body = context.document.body; + const body = context.document.body; body.insertBreak(Word.BreakType.sectionContinuous, Word.InsertLocation.end); await context.sync(); diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index 58ad33faa..d4cd2533d 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -12,8 +12,8 @@ script: $("#get-reviewed-text").click(() => tryCatch(getReviewedText)); $("#setup").click(() => tryCatch(setup)); - /** Get the current change tracking mode. */ async function getChangeTrackingMode() { + // Get the current change tracking mode. await Word.run(async (context) => { const document = context.document; document.load("changeTrackingMode"); @@ -29,8 +29,8 @@ script: }); } - /** Set the change tracking mode. */ async function setChangeTrackingMode() { + // Set the change tracking mode. await Word.run(async (context) => { const mode = $("input[name='mode']:checked").val(); if (mode === "Track only my changes") { @@ -47,12 +47,12 @@ script: }); } - /** Get the reviewed text. */ async function getReviewedText() { + // Get the reviewed text. await Word.run(async (context) => { const range = context.document.getSelection(); - let before = range.getReviewedText(Word.ChangeTrackingVersion.original); - let after = range.getReviewedText(Word.ChangeTrackingVersion.current); + const before = range.getReviewedText(Word.ChangeTrackingVersion.original); + const after = range.getReviewedText(Word.ChangeTrackingVersion.current); await context.sync(); @@ -61,8 +61,8 @@ script: }); } - /** Check for requirement set support and set two paragraphs of sample text. */ 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 change tracking APIs." diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 0b8c7643d..747040c09 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -17,13 +17,13 @@ script: $("#get-comments").click(() => tryCatch(getComments)); $("#setup").click(() => tryCatch(setup)); - /** Set a comment on the selected content. */ async function insertComment() { + // Set a comment on the selected content. await Word.run(async (context) => { - let text = $("#comment-text") + const text = $("#comment-text") .val() .toString(); - let comment = context.document.getSelection().insertComment(text); + const comment = context.document.getSelection().insertComment(text); // Load object for display in Script Lab console. comment.load(); @@ -34,13 +34,13 @@ script: }); } - /** Edit the first comment in the selected content. */ async function editFirstCommentInSelection() { + // Edit the first comment in the selected content. await Word.run(async (context) => { - let text = $("#edit-comment-text") + const text = $("#edit-comment-text") .val() .toString(); - let comment = context.document + const comment = context.document .getSelection() .getComments() .getFirst(); @@ -55,18 +55,18 @@ script: }); } - /** Reply to the first active comment in the selected content. */ async function replyToFirstActiveCommentInSelection() { + // Reply to the first active comment in the selected content. await Word.run(async (context) => { - let text = $("#reply-text") + const text = $("#reply-text") .val() .toString(); - let comments = context.document.getSelection().getComments(); + const comments = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); - let firstActiveComment = comments.items.find((item) => item.resolved !== true); + const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { - let reply = firstActiveComment.reply(text); + const reply = firstActiveComment.reply(text); console.log("Reply added"); } else { console.log("No active comment was found in the selection so couldn't reply."); @@ -74,10 +74,10 @@ script: }); } - /** Toggle Resolved status of the first comment in the selected content. */ async function toggleResolvedStatusOfFirstCommentInSelection() { + // Toggle Resolved status of the first comment in the selected content. await Word.run(async (context) => { - let comment = context.document + const comment = context.document .getSelection() .getComments() .getFirst(); @@ -87,7 +87,7 @@ script: // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. - let toggleResolved: boolean = comment.resolved; + const toggleResolved: boolean = comment.resolved; comment.resolved = !toggleResolved; comment.load(); await context.sync(); @@ -97,10 +97,10 @@ script: }); } - /** Get the range of the first comment in the selected content. */ async function getFirstCommentRange() { + // Get the range of the first comment in the selected content. await Word.run(async (context) => { - let range = context.document + const range = context.document .getSelection() .getComments() .getFirst() @@ -112,10 +112,10 @@ script: }); } - /** Get the comments in the selected content. */ async function getCommentsInSelection() { + // Get the comments in the selected content. await Word.run(async (context) => { - let comments = context.document.getSelection().getComments(); + const comments = context.document.getSelection().getComments(); // Load objects for display in Script Lab console. comments.load(); @@ -126,8 +126,8 @@ script: }); } - /** Delete the first comment in the selected content. */ async function deleteFirstCommentInSelection() { + // Delete the first comment in the selected content. await Word.run(async (context) => { context.document .getSelection() @@ -140,10 +140,10 @@ script: }); } - /** Get the comments in the document body. */ async function getComments() { + // Get the comments in the document body. await Word.run(async (context) => { - let comments = context.document.body.getComments(); + const comments = context.document.body.getComments(); // Load objects for display in Script Lab console. comments.load(); @@ -154,10 +154,12 @@ script: }); } - /** Check for requirement set support and set two paragraphs of sample text. */ 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 comments APIs."); + console.error( + "This version of Word doesn't support WordApiOnline 1.1 and so doesn't currently support the comments APIs." + ); return; } await Word.run(async (context) => { diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 599fceeb8..5c319953a 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -18,8 +18,8 @@ script: $("#get-footnotes-from-range").click(() => tryCatch(getFootnotesFromRange)); $("#setup").click(() => tryCatch(setup)); - /** Set a footnote on the selected content. */ async function insertFootnote() { + // Set a footnote on the selected content. await Word.run(async (context) => { const text = $("#input-footnote") .val() @@ -30,91 +30,91 @@ script: console.log("Inserted footnote."); }); } - /** Select the footnote's reference mark in the document body. */ async function getReference() { + // Select the footnote's reference mark in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/reference"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; const item = footnotes.items[mark]; - let reference = item.reference; + const reference = item.reference; reference.select(); await context.sync(); console.log(`Reference ${referenceNumber} is selected.`); }); } - /** Get the referenced note's type, which is footnote. */ async function getFootnoteType() { + // Get the referenced note's type, which is footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/type"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; const itemType = footnotes.items[mark].type; console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); }); } - /** Get the text of the referenced footnote. */ async function getFootnoteBody() { + // Get the text of the referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/body"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; - let footnoteBody = footnotes.items[mark].body.getRange(); + 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}`); }); } - /** Select the next footnote in the document body. */ async function getNextFootnote() { + // Select the next footnote in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/reference"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; const reference = footnotes.items[mark].getNext().reference; reference.select(); console.log("Selected is the next footnote: " + (mark + 2)); }); } - /** Delete this referenced footnote. */ async function deleteFootnote() { + // Delete this referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; footnotes.items[mark].delete(); await context.sync(); console.log("Footnote deleted."); }); } - /** Get the first footnote in the document body and select its reference mark. */ async function getFirstFootnote() { + // Get the first footnote in the document body and select its reference mark. await Word.run(async (context) => { - let reference = context.document.body.footnotes.getFirst().reference; + const reference = context.document.body.footnotes.getFirst().reference; reference.select(); console.log("The first footnote is selected."); }); } - /** Get the footnotes in the document body. */ async function getFootnotesFromBody() { + // Get the footnotes in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("length"); @@ -123,8 +123,8 @@ script: console.log("Number of footnotes in the document body: " + footnotes.items.length); }); } - /** Get the footnotes in the selected document range. */ async function getFootnotesFromRange() { + // Get the footnotes in the selected document range. await Word.run(async (context) => { const footnotes = context.document.getSelection().footnotes; footnotes.load("length"); @@ -133,8 +133,8 @@ script: console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); } - /** Check for requirement set support and set two paragraphs of sample text. */ 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." diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 32ce75274..e9f4cee7e 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -16,7 +16,7 @@ script: async function insertHeader() { await Word.run(async (context) => { - let header = context.document.body.insertText("This is a sample Heading 1 Title!!\n", + const header = context.document.body.insertText("This is a sample Heading 1 Title!!\n", "Start" /*this means at the beginning of the body */); header.styleBuiltIn = Word.Style.heading1; @@ -26,28 +26,28 @@ script: async function addParagraphs() { await Word.run(async (context) => { - let paragraph = context.document.body.insertParagraph("Timeline", "End"); + const paragraph = context.document.body.insertParagraph("Timeline", "End"); paragraph.style = "Heading 2"; - let paragraph2 = context.document.body.insertParagraph("The Services shall commence on July 31, 2015, and shall continue through July 29, 2015.", "End"); + const paragraph2 = context.document.body.insertParagraph("The Services shall commence on July 31, 2015, and shall continue through July 29, 2015.", "End"); paragraph2.style = "Normal"; - let paragraph3 = context.document.body.insertParagraph("Project Costs by Phase", "End"); + const paragraph3 = context.document.body.insertParagraph("Project Costs by Phase", "End"); paragraph3.style = "Heading 2"; // Note a content control with the title of "ProjectCosts" is added. Content will be replaced later. - let paragraph4 = context.document.body.insertParagraph("", "End"); + const paragraph4 = context.document.body.insertParagraph("", "End"); paragraph4.style = "Normal"; paragraph4.font.highlightColor = "#FFFF00"; - let contentControl = paragraph4.insertContentControl(); + const contentControl = paragraph4.insertContentControl(); contentControl.title = "ProjectCosts"; - let paragraph5 = context.document.body.insertParagraph("Project Team", "End"); + const paragraph5 = context.document.body.insertParagraph("Project Team", "End"); paragraph5.style = "Heading 2"; paragraph5.font.highlightColor = "#FFFFFF"; - let paragraph6 = context.document.body.insertParagraph("Terms of Work", "End"); + const paragraph6 = context.document.body.insertParagraph("Terms of Work", "End"); paragraph6.style = "Heading 1"; - let paragraph7 = context.document.body.insertParagraph("Contractor shall provide the Services and Deliverable(s) as follows:", "End"); + const paragraph7 = context.document.body.insertParagraph("Contractor shall provide the Services and Deliverable(s) as follows:", "End"); paragraph7.style = "Normal"; - let paragraph8 = context.document.body.insertParagraph("Out-of-Pocket Expenses / Invoice Procedures", "End"); + const paragraph8 = context.document.body.insertParagraph("Out-of-Pocket Expenses / Invoice Procedures", "End"); paragraph8.style = "Heading 2"; - let paragraph9 = context.document.body.insertParagraph("Client will be invoiced monthly for the consulting services and T&L expenses. Standard Contractor invoicing is assumed to be acceptable. Invoices are due upon receipt. client will be invoiced all costs associated with out-of-pocket expenses (including, without limitation, costs and expenses associated with meals, lodging, local transportation and any other applicable business expenses) listed on the invoice as a separate line item. Reimbursement for out-of-pocket expenses in connection with performance of this SOW, when authorized and up to the limits set forth in this SOW, shall be in accordance with Client's then-current published policies governing travel and associated business expenses, which information shall be provided by the Client Project Manager.", "End"); + const paragraph9 = context.document.body.insertParagraph("Client will be invoiced monthly for the consulting services and T&L expenses. Standard Contractor invoicing is assumed to be acceptable. Invoices are due upon receipt. client will be invoiced all costs associated with out-of-pocket expenses (including, without limitation, costs and expenses associated with meals, lodging, local transportation and any other applicable business expenses) listed on the invoice as a separate line item. Reimbursement for out-of-pocket expenses in connection with performance of this SOW, when authorized and up to the limits set forth in this SOW, shall be in accordance with Client's then-current published policies governing travel and associated business expenses, which information shall be provided by the Client Project Manager.", "End"); paragraph9.style = "Normal"; // Insert a page break at the end of the document. context.document.body.insertBreak("Page", "End"); @@ -62,11 +62,11 @@ script: // finally sets a tag and title property on each content control. async function addContentControls() { await Word.run(async (context) => { - let results = context.document.body.search("Contractor"); + const results = context.document.body.search("Contractor"); results.load("font/bold"); // Check to make sure these content controls haven't been added yet. - let customerContentControls = context.document.contentControls.getByTag("customer"); + const customerContentControls = context.document.contentControls.getByTag("customer"); customerContentControls.load("text"); await context.sync(); @@ -84,7 +84,7 @@ script: async function changeCustomer() { await Word.run(async (context) => { - let contentControls = context.document.contentControls.getByTag("customer"); + const contentControls = context.document.contentControls.getByTag("customer"); contentControls.load("text"); await context.sync(); 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 9735ebfe7..35ebadba9 100644 --- a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml +++ b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml @@ -17,7 +17,7 @@ script: async function insertContentControls() { // Traverses each paragraph of the document and wraps a content control on each. await Word.run(async (context) => { - let paragraphs = context.document.body.paragraphs; + const paragraphs = context.document.body.paragraphs; paragraphs.load("$none"); // Don't need any properties; just wrap each paragraph with a content control. await context.sync(); @@ -35,7 +35,7 @@ script: async function registerEventHandlers() { await Word.run(async (context) => { - let contentControls = context.document.contentControls; + const contentControls = context.document.contentControls; contentControls.load("items"); await context.sync(); @@ -64,7 +64,7 @@ script: async function deleteContentControl() { await Word.run(async (context) => { - let contentControls = context.document.contentControls.getByTag("forTesting"); + const contentControls = context.document.contentControls.getByTag("forTesting"); contentControls.load("items"); await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index aade26412..2c29a37da 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -11087,8 +11087,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Get the comments in the document body. + await Word.run(async (context) => { - let comments = context.document.body.getComments(); + const comments = context.document.body.getComments(); // Load objects for display in Script Lab console. comments.load(); @@ -11104,7 +11106,7 @@ await Word.run(async (context) => { // Second sentence, let's insert it as a paragraph after the previously inserted one. - let secondSentence = context.document.body.insertParagraph( + const secondSentence = context.document.body.insertParagraph( "This is the first text with a custom style.", "End" ); @@ -11125,11 +11127,11 @@ await Word.run(async (context) => { // Use a two-dimensional array to hold the initial table values. - let data = [ + const data = [ ["Tokyo", "Beijing", "Seattle"], ["Apple", "Orange", "Pineapple"] ]; - let table = context.document.body.insertTable(2, 3, "Start", data); + const table = context.document.body.insertTable(2, 3, "Start", data); table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; table.styleFirstColumn = false; @@ -11141,7 +11143,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml await Word.run(async (context) => { - let results = context.document.body.search("Online"); + const results = context.document.body.search("Online"); results.load("length"); await context.sync(); @@ -11160,7 +11162,7 @@ await Word.run(async (context) => { // Check out how wildcard expression are built, also use the second parameter of the search method to include search modes // (i.e. use wildcards). - let results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); + const results = context.document.body.search("$*.[0-9][0-9]", { matchWildcards: true }); results.load("length"); await context.sync(); @@ -11178,7 +11180,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml await Word.run(async (context) => { - let paragraphs = context.document.body.paragraphs; + const paragraphs = context.document.body.paragraphs; paragraphs.load("text"); await context.sync(); @@ -11247,6 +11249,8 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Get the footnotes in the document body. + await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("length"); @@ -11260,7 +11264,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml await Word.run(async (context) => { - let paragraphs = context.document.body.paragraphs; + const paragraphs = context.document.body.paragraphs; paragraphs.load("text"); await context.sync(); @@ -11319,6 +11323,8 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Get the current change tracking mode. + await Word.run(async (context) => { const document = context.document; document.load("changeTrackingMode"); @@ -11337,10 +11343,12 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Get the reviewed text. + await Word.run(async (context) => { const range = context.document.getSelection(); - let before = range.getReviewedText(Word.ChangeTrackingVersion.original); - let after = range.getReviewedText(Word.ChangeTrackingVersion.current); + const before = range.getReviewedText(Word.ChangeTrackingVersion.original); + const after = range.getReviewedText(Word.ChangeTrackingVersion.current); await context.sync(); @@ -11352,6 +11360,8 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Delete the first comment in the selected content. + await Word.run(async (context) => { context.document .getSelection() @@ -11367,8 +11377,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Get the range of the first comment in the selected content. + await Word.run(async (context) => { - let range = context.document + const range = context.document .getSelection() .getComments() .getFirst() @@ -11383,16 +11395,18 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Reply to the first active comment in the selected content. + await Word.run(async (context) => { - let text = $("#reply-text") + const text = $("#reply-text") .val() .toString(); - let comments = context.document.getSelection().getComments(); + const comments = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); - let firstActiveComment = comments.items.find((item) => item.resolved !== true); + const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { - let reply = firstActiveComment.reply(text); + const reply = firstActiveComment.reply(text); console.log("Reply added"); } else { console.log("No active comment was found in the selection so couldn't reply."); @@ -11403,11 +11417,13 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Edit the first comment in the selected content. + await Word.run(async (context) => { - let text = $("#edit-comment-text") + const text = $("#edit-comment-text") .val() .toString(); - let comment = context.document + const comment = context.document .getSelection() .getComments() .getFirst(); @@ -11425,8 +11441,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Toggle Resolved status of the first comment in the selected content. + await Word.run(async (context) => { - let comment = context.document + const comment = context.document .getSelection() .getComments() .getFirst(); @@ -11436,7 +11454,7 @@ // Toggle resolved status. // If the comment is active, set as resolved. // If it's resolved, set resolved to false. - let toggleResolved: boolean = comment.resolved; + const toggleResolved: boolean = comment.resolved; comment.resolved = !toggleResolved; comment.load(); await context.sync(); @@ -11449,8 +11467,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Get the range of the first comment in the selected content. + await Word.run(async (context) => { - let range = context.document + const range = context.document .getSelection() .getComments() .getFirst() @@ -11465,16 +11485,18 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Reply to the first active comment in the selected content. + await Word.run(async (context) => { - let text = $("#reply-text") + const text = $("#reply-text") .val() .toString(); - let comments = context.document.getSelection().getComments(); + const comments = context.document.getSelection().getComments(); comments.load("items"); await context.sync(); - let firstActiveComment = comments.items.find((item) => item.resolved !== true); + const firstActiveComment = comments.items.find((item) => item.resolved !== true); if (firstActiveComment) { - let reply = firstActiveComment.reply(text); + const reply = firstActiveComment.reply(text); console.log("Reply added"); } else { console.log("No active comment was found in the selection so couldn't reply."); @@ -11486,7 +11508,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml await Word.run(async (context) => { - let contentControls = context.document.contentControls.getByTag("forTesting"); + const contentControls = context.document.contentControls.getByTag("forTesting"); contentControls.load("items"); await context.sync(); @@ -11544,7 +11566,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml await Word.run(async (context) => { - let contentControls = context.document.contentControls; + const contentControls = context.document.contentControls; contentControls.load("items"); await context.sync(); @@ -11644,7 +11666,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml await Word.run(async (context) => { - let contentControls = context.document.contentControls.getByTag("customer"); + const contentControls = context.document.contentControls.getByTag("customer"); contentControls.load("text"); await context.sync(); @@ -11693,7 +11715,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml await Word.run(async (context) => { - let properties = context.document.properties.customProperties; + const properties = context.document.properties.customProperties; properties.load("key,type,value"); await context.sync(); @@ -11705,6 +11727,8 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Get the current change tracking mode. + await Word.run(async (context) => { const document = context.document; document.load("changeTrackingMode"); @@ -11724,7 +11748,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/get-built-in-properties.yaml await Word.run(async (context) => { - let builtInProperties = context.document.properties; + const builtInProperties = context.document.properties; builtInProperties.load("*"); // Let's get all! await context.sync(); @@ -11849,6 +11873,8 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + // Get the first image in the document. + await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); firstPicture.load("width, height"); @@ -11869,7 +11895,7 @@ // Inserts a section without an associated page break. await Word.run(async (context) => { - let body = context.document.body; + const body = context.document.body; body.insertBreak(Word.BreakType.sectionContinuous, Word.InsertLocation.end); await context.sync(); @@ -11881,13 +11907,15 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Delete this referenced footnote. + await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; footnotes.items[mark].delete(); await context.sync(); @@ -11898,13 +11926,15 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Select the next footnote in the document body. + await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/reference"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; const reference = footnotes.items[mark].getNext().reference; reference.select(); console.log("Selected is the next footnote: " + (mark + 2)); @@ -11914,14 +11944,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Get the text of the referenced footnote. + await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/body"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; - let footnoteBody = footnotes.items[mark].body.getRange(); + const mark = (referenceNumber as number) - 1; + const footnoteBody = footnotes.items[mark].body.getRange(); footnoteBody.load("text"); await context.sync(); @@ -11932,15 +11964,17 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Select the footnote's reference mark in the document body. + await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/reference"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; const item = footnotes.items[mark]; - let reference = item.reference; + const reference = item.reference; reference.select(); await context.sync(); @@ -11951,13 +11985,15 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Get the referenced note's type, which is footnote. + await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/type"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; const itemType = footnotes.items[mark].type; console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); }); @@ -11966,8 +12002,11 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Get the first footnote in the document body and select its reference + mark. + await Word.run(async (context) => { - let reference = context.document.body.footnotes.getFirst().reference; + const reference = context.document.body.footnotes.getFirst().reference; reference.select(); console.log("The first footnote is selected."); }); @@ -11976,13 +12015,15 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Get the referenced note's type, which is footnote. + await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/type"); await context.sync(); const referenceNumber = $("#input-reference").val(); - let mark = (referenceNumber as number) - 1; + const mark = (referenceNumber as number) - 1; const itemType = footnotes.items[mark].type; console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); }); @@ -11993,14 +12034,14 @@ await Word.run(async (context) => { // Gets the complete sentence (as range) associated with the insertion point. - let sentences = context.document + const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); // Expands the range to the end of the paragraph to get all the complete sentences. - let sentencesToTheEndOfParagraph = sentences.items[0] + const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( context.document @@ -12034,7 +12075,7 @@ await Word.run(async (context) => { // Replace the last paragraph. - let range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); + const range = context.document.body.paragraphs.getLast().insertText("Just replaced the last paragraph!", "Replace"); range.font.highlightColor = "black"; range.font.color = "white"; @@ -12067,8 +12108,8 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/split-words-of-first-paragraph.yaml await Word.run(async (context) => { - let paragraph = context.document.body.paragraphs.getFirst(); - let words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); + const paragraph = context.document.body.paragraphs.getFirst(); + const words = paragraph.split([" "], true /* trimDelimiters*/, true /* trimSpaces */); words.load("text"); await context.sync(); @@ -12091,7 +12132,7 @@ // This example starts a new list stating with the second paragraph. await Word.run(async (context) => { - let paragraphs = context.document.body.paragraphs; + const paragraphs = context.document.body.paragraphs; paragraphs.load("$none"); // No properties needed. await context.sync(); @@ -12103,7 +12144,7 @@ // To add new items to the list use start/end on the insert location parameter. list.insertParagraph("New list item on top of the list", "Start"); - let paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); + const paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); paragraph.listItem.level = 4; // Sets up list level for the list item. // To add paragraphs outside the list use before/after: list.insertParagraph("New paragraph goes after (not part of the list)", "After"); @@ -12193,7 +12234,7 @@ await Word.run(async (context) => { // The collection of paragraphs of the current selection returns the full paragraphs contained in it. - let paragraph = context.document.getSelection().paragraphs.getFirst(); + const paragraph = context.document.getSelection().paragraphs.getFirst(); paragraph.load("text"); await context.sync(); @@ -12204,8 +12245,10 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Get the comments in the selected content. + await Word.run(async (context) => { - let comments = context.document.getSelection().getComments(); + const comments = context.document.getSelection().getComments(); // Load objects for display in Script Lab console. comments.load(); @@ -12219,10 +12262,12 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml + // Get the reviewed text. + await Word.run(async (context) => { const range = context.document.getSelection(); - let before = range.getReviewedText(Word.ChangeTrackingVersion.original); - let after = range.getReviewedText(Word.ChangeTrackingVersion.current); + const before = range.getReviewedText(Word.ChangeTrackingVersion.original); + const after = range.getReviewedText(Word.ChangeTrackingVersion.current); await context.sync(); @@ -12236,14 +12281,14 @@ await Word.run(async (context) => { // Gets the complete sentence (as range) associated with the insertion point. - let sentences = context.document + const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); // Expands the range to the end of the paragraph to get all the complete sentences. - let sentencesToTheEndOfParagraph = sentences.items[0] + const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( context.document @@ -12264,11 +12309,13 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml + // Set a comment on the selected content. + await Word.run(async (context) => { - let text = $("#comment-text") + const text = $("#comment-text") .val() .toString(); - let comment = context.document.getSelection().insertComment(text); + const comment = context.document.getSelection().insertComment(text); // Load object for display in Script Lab console. comment.load(); @@ -12283,11 +12330,11 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/90-scenarios/doc-assembly.yaml await Word.run(async (context) => { - let results = context.document.body.search("Contractor"); + const results = context.document.body.search("Contractor"); results.load("font/bold"); // Check to make sure these content controls haven't been added yet. - let customerContentControls = context.document.contentControls.getByTag("customer"); + const customerContentControls = context.document.contentControls.getByTag("customer"); customerContentControls.load("text"); await context.sync(); @@ -12306,6 +12353,8 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Set a footnote on the selected content. + await Word.run(async (context) => { const text = $("#input-footnote") .val() @@ -12320,6 +12369,8 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + // Get the footnotes in the selected document range. + await Word.run(async (context) => { const footnotes = context.document.getSelection().footnotes; footnotes.load("length"); @@ -12334,14 +12385,14 @@ await Word.run(async (context) => { // Gets the complete sentence (as range) associated with the insertion point. - let sentences = context.document + const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); // Expands the range to the end of the paragraph to get all the complete sentences. - let sentencesToTheEndOfParagraph = sentences.items[0] + const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( context.document @@ -12365,7 +12416,7 @@ // Inserts a section break on the next page. await Word.run(async (context) => { - let body = context.document.body; + const body = context.document.body; body.insertBreak(Word.BreakType.sectionNext, Word.InsertLocation.end); await context.sync(); @@ -12406,7 +12457,7 @@ // Inserts a section break on the next even page. await Word.run(async (context) => { - let body = context.document.body; + const body = context.document.body; body.insertBreak(Word.BreakType.sectionEven, Word.InsertLocation.end); await context.sync(); @@ -12430,7 +12481,7 @@ 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( + const sentence = context.document.body.insertParagraph( "To be or not to be", "End" ); @@ -12446,7 +12497,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml await Word.run(async (context) => { - let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; + const firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; firstCell.load("text"); await context.sync(); @@ -12458,7 +12509,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml await Word.run(async (context) => { - let firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; + const firstCell = context.document.body.tables.getFirst().getCell(0, 0).body; firstCell.load("text"); await context.sync(); From 01261993592344e6ecc8892773fc84f516b8786b Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 4 Aug 2022 12:01:47 -0700 Subject: [PATCH 101/336] [Excel] Update excel.xlsx to map existing snippets to enums (#679) * Update excel.xlsx to map existing snippets to enums * Update excel.xlsx to map existing snippets to enums * Adjust formatting in excel.xlsx * Double-checking all new mappings in excel.xlsx * Add missing Member ID to excel.xlsx * Reorder excel.xlsx by class name --- snippet-extractor-metadata/excel.xlsx | Bin 25625 -> 27610 bytes snippet-extractor-output/snippets.yaml | 2825 +++++++++++++++++------- 2 files changed, 2066 insertions(+), 759 deletions(-) diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 93a7e502bdcb11f19f3a705a0172d9334b28139c..e1c7e9b31e1bd609033fa27d2e8d77a753bc692d 100644 GIT binary patch delta 19134 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 I3h^Kv0Ej*Qs{jB1 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2c29a37da..f3e3048f5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,31 +1,20 @@ -'Excel.Application#decimalSeparator:member': +'Excel.AggregationFunction:enum': - >- // 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"); - await context.sync(); - - // Local settings are set under the "Options > Advanced" menu. - const localDecimalSeparator = context.application.decimalSeparator; - const localThousandsSeparator = context.application.thousandsSeparator; - - const systemDecimalSeparator = context.application.cultureInfo.numberFormat.numberDecimalSeparator; - const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; - - console.log("Local character settings: "); - console.log(` Local decimal separator: ${localDecimalSeparator}`); - console.log(` Local thousands separator: ${localThousandsSeparator}`); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml - console.log("System culture settings: "); - console.log(` System decimal separator: ${systemDecimalSeparator}`); - console.log(` System thousands separator: ${systemThousandsSeparator}`); - console.log(` `); + async function genericFunctionSwitch(functionType: + Excel.AggregationFunction) { + await Excel.run(async (context) => { + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.dataHierarchies.load("no-properties-needed"); + await context.sync(); - await context.sync(); - }); + pivotTable.dataHierarchies.items[0].summarizeBy = functionType; + pivotTable.dataHierarchies.items[1].summarizeBy = functionType; + await context.sync(); + }); + } 'Excel.Application#suspendScreenUpdatingUntilNextSync:member(1)': - >- // Link to full sample: @@ -68,6 +57,102 @@ await Excel.run(async (context) => { context.application.calculate(Excel.CalculationType.full); }); +'Excel.Application#decimalSeparator:member': + - >- + // 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"); + await context.sync(); + + // Local settings are set under the "Options > Advanced" menu. + const localDecimalSeparator = context.application.decimalSeparator; + const localThousandsSeparator = context.application.thousandsSeparator; + + const systemDecimalSeparator = context.application.cultureInfo.numberFormat.numberDecimalSeparator; + const systemThousandsSeparator = context.application.cultureInfo.numberFormat.numberGroupSeparator; + + console.log("Local character settings: "); + console.log(` Local decimal separator: ${localDecimalSeparator}`); + console.log(` Local thousands separator: ${localThousandsSeparator}`); + + console.log("System culture settings: "); + console.log(` System decimal separator: ${systemDecimalSeparator}`); + console.log(` System thousands separator: ${systemThousandsSeparator}`); + console.log(` `); + + await context.sync(); + }); +'Excel.ArrowheadLength:enum': + - >- + // 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; + line.beginArrowheadLength = Excel.ArrowheadLength.long; + line.beginArrowheadWidth = Excel.ArrowheadWidth.wide; + line.beginArrowheadStyle = Excel.ArrowheadStyle.oval; + + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + + await context.sync(); + }); +'Excel.ArrowheadStyle:enum': + - >- + // 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; + line.beginArrowheadLength = Excel.ArrowheadLength.long; + line.beginArrowheadWidth = Excel.ArrowheadWidth.wide; + line.beginArrowheadStyle = Excel.ArrowheadStyle.oval; + + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + + await context.sync(); + }); +'Excel.ArrowheadWidth:enum': + - >- + // 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; + line.beginArrowheadLength = Excel.ArrowheadLength.long; + line.beginArrowheadWidth = Excel.ArrowheadWidth.wide; + line.beginArrowheadStyle = Excel.ArrowheadStyle.oval; + + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + + await context.sync(); + }); +'Excel.AutoFillType:enum': + - >- + // 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"); + + // Copy only the formatting, not the values and formulas. + sumCell.autoFill("K4:K7", Excel.AutoFillType.fillFormats); + sumCell.format.autofitColumns(); + await context.sync(); + }); 'Excel.AutoFilter#apply:member(1)': - >- // Link to full sample: @@ -151,7 +236,25 @@ await context.sync(); }); -'Excel.CellPropertiesFill#color:member': +'Excel.BindingType:enum': + - >- + // 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"); + sumRange.load("columnCount"); + await context.sync(); + + // add an event handler to each cell in the sum range + for (let i = 0; i < sumRange.columnCount; i++) { + let sumBinding = context.workbook.bindings.add(sumRange.getCell(0,i), Excel.BindingType.range, "SumBinding" + i); + sumBinding.onDataChanged.add(onSumChanged); + } + await context.sync(); + }); +'Excel.BorderLineStyle:enum': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -227,35 +330,104 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFillLoadOptions#color:member': +'Excel.BuiltInStyle:enum': - >- // 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(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Define the cell properties to get by setting the matching LoadOptions to true. - const propertiesToGet = cell.getCellProperties({ - address: true, + // 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: true + color: "Blue" }, font: { - color: true + color: "White", + bold: true } - }, - style: true - }); + } + }; - // Sync to get the data from the workbook. + 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(); - 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.CellPropertiesFont#color:member': +'Excel.CalculationMode:enum': + - >- + // 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"); + await context.sync(); + + console.log("Current calculation mode: " + context.application.calculationMode); + }); +'Excel.CalculationType:enum': + - >- + // 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(); + }); +'Excel.CellPropertiesFill#color:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/cell-properties.yaml @@ -331,7 +503,7 @@ sheet.getUsedRange().format.autofitColumns(); await context.sync(); }); -'Excel.CellPropertiesFontLoadOptions#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 @@ -359,31 +531,135 @@ 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.CellPropertiesFont#color:member': - >- // 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(); + const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Define the cell properties to get by setting the matching LoadOptions to true. - const propertiesToGet = cell.getCellProperties({ - address: true, + // 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: true + color: "Blue" }, font: { - color: true + color: "White", + bold: true } - }, - style: true - }); + } + }; - // Sync to get the data from the workbook. - await context.sync(); - const cellProperties = propertiesToGet.value[0][0]; + 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.CellPropertiesFontLoadOptions#color:member': + - >- + // 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.CellPropertiesLoadOptions#address:member': + - >- + // 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}`); }); @@ -440,6 +716,24 @@ range.valuesAsJson = [[error]]; await context.sync(); }); +'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 + + // This function adds a data table to a chart that already exists on the + worksheet. + + await Excel.run(async (context) => { + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the data table object for the chart and set it to visible. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load("visible"); + chartDataTable.visible = true; + await context.sync(); + }); 'Excel.Chart#onActivated:member': - >- // Link to full sample: @@ -502,24 +796,6 @@ console.log("The pie chart is NOT active."); }); } -'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 - - // This function adds a data table to a chart that already exists on the - worksheet. - - await Excel.run(async (context) => { - // Retrieve the chart named "SalesChart" from the "Sample" worksheet. - const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); - - // Get the data table object for the chart and set it to visible. - const chartDataTable = chart.getDataTableOrNullObject(); - chartDataTable.load("visible"); - chartDataTable.visible = true; - await context.sync(); - }); 'Excel.ChartAxis#displayUnit:member': - >- // Link to full sample: @@ -1168,6 +1444,70 @@ 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"; + + expensesTable.getHeaderRowRange().values = [["Product", "Qtr1", "Qtr2", "Qtr3", "Qtr4"]]; + expensesTable.rows.add(null, [ + ["Frames", 5000, 7000, 6544, 4377], + ["Saddles", 400, 323, 276, 651], + ["Brake levers", 12000, 8766, 8456, 9812], + ["Chains", 1550, 1088, 692, 853], + ["Mirrors", 225, 600, 923, 544], + ["Spokes", 6005, 7634, 4589, 8765] + ]); + + sheet.getUsedRange().format.autofitColumns(); + sheet.getUsedRange().format.autofitRows(); + sheet.activate(); + + // Create a line chart based on data from SalesTable. + let dataRange = sheet.getRange("A1:E7"); + let chart = sheet.charts.add("Line", dataRange, Excel.ChartSeriesBy.rows); + + // Position and style the chart. + chart.setPosition("A15", "E30"); + chart.legend.position = "Right"; + chart.legend.format.fill.setSolidColor("white"); + + await context.sync(); + }); +'Excel.ChartSeriesDimension:enum': + - >- + // 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"); + + // 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(); + + // Log the information. + console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); + }); 'Excel.ChartTitle#getSubstring:member(1)': - >- // Link to full sample: @@ -1284,6 +1624,42 @@ await context.sync(); }); +'Excel.ClearApplyTo:enum': + - >- + // 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"); + + const productsRange = sheet.getRange("A3:A11"); + productsRange.load("values"); + + await context.sync(); + + // Clear all hyperlinks. + for (let i = 0; i < productsRange.values.length; i++) { + let cellRange = productsRange.getCell(i, 0); + + // Clear the hyperlink. + // This eliminates the hyperlink but does not update text format. + cellRange.clear(Excel.ClearApplyTo.hyperlinks); + + // Update text format. + cellRange.format.font.underline = Excel.RangeUnderlineStyle.none; + cellRange.format.font.color = "#000000"; + } + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + context.workbook.close(Excel.CloseBehavior.skipSave); + }); 'Excel.ColorScaleConditionalFormat#criteria:member': - >- // Link to full sample: @@ -1301,17 +1677,6 @@ }; conditionalFormat.colorScale.criteria = criteria; - await context.sync(); - }); -'Excel.Comment#content:member': - - >- - // 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); - comment.content = "PLEASE add headers here."; await context.sync(); }); 'Excel.Comment#delete:member(1)': @@ -1336,6 +1701,17 @@ console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); +'Excel.Comment#content:member': + - >- + // 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); + comment.content = "PLEASE add headers here."; + await context.sync(); + }); 'Excel.Comment#resolved:member': - >- // Link to full sample: @@ -1467,33 +1843,33 @@ console.log(` ID: ${event.commentDetails[0].commentId}`); }); } -'Excel.CommentReply#content:member': +'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 await Excel.run(async (context) => { + // Remove the first comment reply from this worksheet's first comment. const sheet = context.workbook.worksheets.getItem("Comments"); const comment = sheet.comments.getItemAt(0); - const reply = comment.replies.getItemAt(0); - reply.load("content"); - // Sync to load the content of the comment reply. - await context.sync(); - - // Append "Please!" to the end of the comment reply. - reply.content += " Please!"; + comment.replies.getItemAt(0).delete(); await context.sync(); }); -'Excel.CommentReply#delete:member(1)': +'Excel.CommentReply#content:member': - >- // 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"); const comment = sheet.comments.getItemAt(0); - comment.replies.getItemAt(0).delete(); + const reply = comment.replies.getItemAt(0); + reply.load("content"); + // Sync to load the content of the comment reply. + await context.sync(); + + // Append "Please!" to the end of the comment reply. + reply.content += " Please!"; await context.sync(); }); 'Excel.CommentReplyCollection#add:member(1)': @@ -1562,30 +1938,74 @@ await context.sync(); }); -'Excel.ConditionalFormat#cellValue:member': +'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 await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B21:E23"); + const range = sheet.getRange("B8:E13"); const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.cellValue); - conditionalFormat.cellValue.format.font.color = "red"; - conditionalFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; + .add(Excel.ConditionalFormatType.dataBar); + conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; await context.sync(); }); -'Excel.ConditionalFormat#colorScale:member': +'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 await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Sample"); - const range = sheet.getRange("B2:M5"); - const conditionalFormat = range.conditionalFormats + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); + + await context.sync(); + + let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; + worksheetRange.conditionalFormats.items.forEach(item => { + cfRangePairs.push({ + cf: item, + range: item.getRange().load("address") + }); + }); + + await context.sync(); + + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); + } + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B21:E23"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.cellValue); + conditionalFormat.cellValue.format.font.color = "red"; + conditionalFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats .add(Excel.ConditionalFormatType.colorScale); const criteria = { minimum: { formula: null, type: Excel.ConditionalFormatColorCriterionType.lowestValue, color: "blue" }, @@ -1624,36 +2044,6 @@ await context.sync(); }); -'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 - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const worksheetRange = sheet.getRange(); - worksheetRange.conditionalFormats.load("type"); - - await context.sync(); - - let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; - worksheetRange.conditionalFormats.items.forEach(item => { - cfRangePairs.push({ - cf: item, - range: item.getRange().load("address") - }); - }); - - await context.sync(); - - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } - }); 'Excel.ConditionalFormat#iconSet:member': - >- // Link to full sample: @@ -1820,6 +2210,106 @@ console.log("No conditional formats applied."); } }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B2:M5"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.colorScale); + const criteria = { + minimum: { formula: null, type: Excel.ConditionalFormatColorCriterionType.lowestValue, color: "blue" }, + midpoint: { formula: "50", type: Excel.ConditionalFormatColorCriterionType.percent, color: "yellow" }, + maximum: { formula: null, type: Excel.ConditionalFormatColorCriterionType.highestValue, color: "red" } + }; + conditionalFormat.colorScale.criteria = criteria; + + await context.sync(); + }); +'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 + + 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.iconSet); + const iconSetCF = conditionalFormat.iconSet; + iconSetCF.style = Excel.IconSet.threeTriangles; + + /* + The iconSetCF.criteria array is automatically prepopulated with + criterion elements whose properties have been given default settings. + You can't write to each property of a criterion directly. Instead, + replace the whole criteria object. + + With a "three*" icon set style, such as "threeTriangles", the third + element in the criteria array (criteria[2]) defines the "top" icon; + e.g., a green triangle. The second (criteria[1]) defines the "middle" + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every + cell that does not match the other two criteria always gets the low + icon. + */ + iconSetCF.criteria = [ + {} as any, + { + type: Excel.ConditionalFormatIconRuleType.number, + operator: Excel.ConditionalIconCriterionOperator.greaterThanOrEqual, + formula: "=700" + }, + { + type: Excel.ConditionalFormatIconRuleType.number, + operator: Excel.ConditionalIconCriterionOperator.greaterThanOrEqual, + formula: "=1000", + } + ]; + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + queueCommandsToClearAllConditionalFormats(sheet); + + const temperatureDataRange = sheet.tables.getItem("TemperatureTable").getDataBodyRange(); + + /* When the priority property of ConditionalFormat objects + is not explicitly set, they are prioritized in the order + that they are added, with zero-based numbering: 0, 1, ... + Contradictions are resolved in favor of the format with + the lower priority number. In the example below, negative + numbers will get a green background, but NOT a blue font, + because priority goes to the format that gives them a red font. + */ + + // Set low numbers to bold, dark red font. This format will + // get priority 0. + const presetFormat = temperatureDataRange.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + presetFormat.preset.format.font.color = "red"; + presetFormat.preset.format.font.bold = true; + presetFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevBelowAverage }; + + // Set negative numbers to blue font with green background. + // This format will get priority 1. + const cellValueFormat = temperatureDataRange.conditionalFormats + .add(Excel.ConditionalFormatType.cellValue); + cellValueFormat.cellValue.format.font.color = "blue"; + cellValueFormat.cellValue.format.fill.color = "lightgreen"; + cellValueFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; + + await context.sync(); + }); 'Excel.ConditionalFormatRule#formula:member': - >- // Link to full sample: @@ -1832,6 +2322,44 @@ conditionalFormat.custom.rule.formula = '=IF(B8>INDIRECT("RC[-1]",0),TRUE)'; conditionalFormat.custom.format.font.color = "green"; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + queueCommandsToClearAllConditionalFormats(sheet); + + const temperatureDataRange = sheet.tables.getItem("TemperatureTable").getDataBodyRange(); + + /* When the priority property of ConditionalFormat objects + is not explicitly set, they are prioritized in the order + that they are added, with zero-based numbering: 0, 1, ... + Contradictions are resolved in favor of the format with + the lower priority number. In the example below, negative + numbers will get a green background, but NOT a blue font, + because priority goes to the format that gives them a red font. + */ + + // Set low numbers to bold, dark red font. This format will + // get priority 0. + const presetFormat = temperatureDataRange.conditionalFormats + .add(Excel.ConditionalFormatType.presetCriteria); + presetFormat.preset.format.font.color = "red"; + presetFormat.preset.format.font.bold = true; + presetFormat.preset.rule = { criterion: Excel.ConditionalFormatPresetCriterion.oneStdDevBelowAverage }; + + // Set negative numbers to blue font with green background. + // This format will get priority 1. + const cellValueFormat = temperatureDataRange.conditionalFormats + .add(Excel.ConditionalFormatType.cellValue); + cellValueFormat.cellValue.format.font.color = "blue"; + cellValueFormat.cellValue.format.fill.color = "lightgreen"; + cellValueFormat.cellValue.rule = { formula1: "=0", operator: "LessThan" }; + await context.sync(); }); 'Excel.ConditionalIconCriterion#formula:member': @@ -1977,6 +2505,49 @@ await context.sync(); }); +'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 + + 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.iconSet); + const iconSetCF = conditionalFormat.iconSet; + iconSetCF.style = Excel.IconSet.threeTriangles; + + /* + The iconSetCF.criteria array is automatically prepopulated with + criterion elements whose properties have been given default settings. + You can't write to each property of a criterion directly. Instead, + replace the whole criteria object. + + With a "three*" icon set style, such as "threeTriangles", the third + element in the criteria array (criteria[2]) defines the "top" icon; + e.g., a green triangle. The second (criteria[1]) defines the "middle" + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every + cell that does not match the other two criteria always gets the low + icon. + */ + iconSetCF.criteria = [ + {} as any, + { + type: Excel.ConditionalFormatIconRuleType.number, + operator: Excel.ConditionalIconCriterionOperator.greaterThanOrEqual, + formula: "=700" + }, + { + type: Excel.ConditionalFormatIconRuleType.number, + operator: Excel.ConditionalIconCriterionOperator.greaterThanOrEqual, + formula: "=1000", + } + ]; + + await context.sync(); + }); 'Excel.ConditionalPresetCriteriaRule#criterion:member': - >- // Link to full sample: @@ -2005,6 +2576,56 @@ conditionalFormat.textComparison.format.font.color = "red"; conditionalFormat.textComparison.rule = { operator: Excel.ConditionalTextOperator.contains, text: "Delayed" }; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B16:D18"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.containsText); + conditionalFormat.textComparison.format.font.color = "red"; + conditionalFormat.textComparison.rule = { operator: Excel.ConditionalTextOperator.contains, text: "Delayed" }; + + await context.sync(); + }); +'Excel.ConnectorType:enum': + - >- + // 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); + line.name = "StraightLine"; + await context.sync(); + }); +'Excel.ContentType:enum': + - >- + // 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 = { + email: "kakri@contoso.com", + id: 0, + name: "Kate Kristensen" + }; + + // This will tag the mention's name using the '@' syntax. + // They will be notified via email. + const commentBody = { + mentions: [mention], + richContent: '' + mention.name + " - Can you take a look?" + }; + + // Note that an InvalidArgument error will be thrown if multiple cells passed to `comment.add`. + sheet.comments.add("A1", commentBody, Excel.ContentType.mention); await context.sync(); }); 'Excel.CultureInfo#datetimeFormat:member': @@ -2135,30 +2756,6 @@ await context.sync(); }); -'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 - - await Excel.run(async (context) => { - // You must have the xmlns attribute to populate the - // CustomXml.namespaceUri property. - const originalXml = "JuanHongSally"; - const customXmlPart = context.workbook.customXmlParts.add(originalXml); - customXmlPart.load("id"); - const xmlBlob = customXmlPart.getXml(); - - await context.sync(); - - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); - - // Store the XML part's ID in a setting. - const settings = context.workbook.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); - - await context.sync(); - }); 'Excel.CustomXmlPart#setXml:member(1)': - >- // Link to full sample: @@ -2183,6 +2780,30 @@ await context.sync(); } }); +'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 + + await Excel.run(async (context) => { + // You must have the xmlns attribute to populate the + // CustomXml.namespaceUri property. + const originalXml = "JuanHongSally"; + const customXmlPart = context.workbook.customXmlParts.add(originalXml); + customXmlPart.load("id"); + const xmlBlob = customXmlPart.getXml(); + + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + + // Store the XML part's ID in a setting. + const settings = context.workbook.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); + + await context.sync(); + }); 'Excel.CustomXmlPartCollection#add:member(1)': - >- // Link to full sample: @@ -2505,6 +3126,42 @@ }; nameRange.dataValidation.rule = approvedListRule; + await context.sync(); + }); +'Excel.DataValidationOperator:enum': + - >- + // 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.DataValidationRule#list:member': @@ -2569,6 +3226,51 @@ await context.sync(); }); +'Excel.DateFilterCondition:enum': + - >- + // 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. + + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // PivotFilters can only be applied to PivotHierarchies that are being used for pivoting. + // If it's not already there, add "Date Updated" to the hierarchies. + let dateHierarchy = pivotTable.rowHierarchies.getItemOrNullObject("Date Updated"); + await context.sync(); + if (dateHierarchy.isNullObject) { + dateHierarchy = pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Date Updated")); + } + + // Apply a date filter to filter out anything logged before August. + const filterField = dateHierarchy.fields.getItem("Date Updated"); + const dateFilter = { + condition: Excel.DateFilterCondition.afterOrEqualTo, + comparator: { + date: "2020-08-01", + specificity: Excel.FilterDatetimeSpecificity.month + } + }; + filterField.applyFilter({ dateFilter: dateFilter }); + + await context.sync(); + }); +'Excel.DeleteShiftDirection:enum': + - >- + // 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". + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("A5:F5"); + range.delete(Excel.DeleteShiftDirection.up); + }); 'Excel.DocumentProperties#custom:member': - >- // Link to full sample: @@ -2586,6 +3288,30 @@ console.log(`${property.key}:${property.value}`); }); }); +'Excel.DynamicFilterCriteria:enum': + - >- + // 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"); + + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + let filter = expensesTable.columns.getItem("Amount").filter; + filter.apply({ + filterOn: Excel.FilterOn.dynamic, + dynamicCriteria: Excel.DynamicFilterCriteria.belowAverage + }); + + filter = expensesTable.columns.getItem("Category").filter; + filter.apply({ + filterOn: Excel.FilterOn.values, + values: ["Restaurant", "Groceries"] + }); + + await context.sync(); + }); 'Excel.ErrorCellValue:type': - >- // Link to full sample: @@ -2632,6 +3358,82 @@ range.valuesAsJson = [[error]]; await context.sync(); }); +'Excel.FillPattern:enum': + - >- + // 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.FilterCriteria#filterOn:member': - >- // Link to full sample: @@ -2654,6 +3456,38 @@ await context.sync(); }); +'Excel.FilterDatetimeSpecificity:enum': + - >- + // 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. + + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // PivotFilters can only be applied to PivotHierarchies that are being used for pivoting. + // If it's not already there, add "Date Updated" to the hierarchies. + let dateHierarchy = pivotTable.rowHierarchies.getItemOrNullObject("Date Updated"); + await context.sync(); + if (dateHierarchy.isNullObject) { + dateHierarchy = pivotTable.rowHierarchies.add(pivotTable.hierarchies.getItem("Date Updated")); + } + + // Apply a date filter to filter out anything logged before August. + const filterField = dateHierarchy.fields.getItem("Date Updated"); + const dateFilter = { + condition: Excel.DateFilterCondition.afterOrEqualTo, + comparator: { + date: "2020-08-01", + specificity: Excel.FilterDatetimeSpecificity.month + } + }; + filterField.applyFilter({ dateFilter: dateFilter }); + + await context.sync(); + }); 'Excel.FormattedNumberCellValue#numberFormat:member': - >- // Link to full sample: @@ -2707,21 +3541,115 @@ ]; await context.sync(); }); -'Excel.IconSetConditionalFormat#criteria:member': +'Excel.GeometricShapeType:enum': - >- // 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/44-shape/shape-create-and-delete.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.iconSet); - const iconSetCF = conditionalFormat.iconSet; - iconSetCF.style = Excel.IconSet.threeTriangles; - - /* - The iconSetCF.criteria array is automatically prepopulated with + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon); + shape.left = 5; + shape.top = 5; + shape.height = 175; + shape.width = 200; + await context.sync(); + }); +'Excel.GroupOption:enum': + - >- + // 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.HorizontalAlignment:enum': + - >- + // 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.IconSet:enum': + - >- + // 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"); + const conditionalFormat = range.conditionalFormats + .add(Excel.ConditionalFormatType.iconSet); + const iconSetCF = conditionalFormat.iconSet; + iconSetCF.style = Excel.IconSet.threeTriangles; + + /* + The iconSetCF.criteria array is automatically prepopulated with + criterion elements whose properties have been given default settings. + You can't write to each property of a criterion directly. Instead, + replace the whole criteria object. + + With a "three*" icon set style, such as "threeTriangles", the third + element in the criteria array (criteria[2]) defines the "top" icon; + e.g., a green triangle. The second (criteria[1]) defines the "middle" + icon. The first (criteria[0]) defines the "low" icon, but it + can often be left empty as the following object shows, because every + cell that does not match the other two criteria always gets the low + icon. + */ + iconSetCF.criteria = [ + {} as any, + { + type: Excel.ConditionalFormatIconRuleType.number, + operator: Excel.ConditionalIconCriterionOperator.greaterThanOrEqual, + formula: "=700" + }, + { + type: Excel.ConditionalFormatIconRuleType.number, + operator: Excel.ConditionalIconCriterionOperator.greaterThanOrEqual, + formula: "=1000", + } + ]; + + await context.sync(); + }); +'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 + + 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.iconSet); + const iconSetCF = conditionalFormat.iconSet; + iconSetCF.style = Excel.IconSet.threeTriangles; + + /* + The iconSetCF.criteria array is automatically prepopulated with criterion elements whose properties have been given default settings. You can't write to each property of a criterion directly. Instead, replace the whole criteria object. @@ -2807,6 +3735,70 @@ console.log("The image's format is: " + image.format); await context.sync(); }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const range = sheet.getRange("B4:E4"); + + range.insert(Excel.InsertShiftDirection.down); + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Specify the direction with the `KeyboardDirection` enum. + const direction = Excel.KeyboardDirection.up; + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get the top-most cell of the current used range. + // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. + const rangeEdge = range.getRangeEdge( + direction, + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + rangeEdge.select(); + + await context.sync(); + }); +'Excel.LabelFilterCondition:enum': + - >- + // 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. + + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // Get the "Type" field. + const field = pivotTable.hierarchies.getItem("Type").fields.getItem("Type"); + + // Filter out any types that start with "L" ("Lemons" and "Limes" in this case). + const filter: Excel.PivotLabelFilter = { + condition: Excel.LabelFilterCondition.beginsWith, + substring: "L", + exclusive: true + }; + + // Apply the label filter to the field. + field.applyFilter({ labelFilter: filter }); + + await context.sync(); + }); 'Excel.Line#connectBeginShape:member(1)': - >- // Link to full sample: @@ -2991,6 +3983,26 @@ farmSheet.horizontalPageBreaks.add("A21:E21"); await context.sync(); }); +'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 + + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintArea("A1:D41"); + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const farmSheet = context.workbook.worksheets.getItem("Print"); + farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + await context.sync(); + }); 'Excel.PageLayout#centerHorizontally:member': - >- // Link to full sample: @@ -3023,35 +4035,40 @@ farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -'Excel.PageLayout#setPrintArea:member(1)': +'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 await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.setPrintArea("A1:D41"); + farmSheet.pageLayout.zoom = { scale: 200 }; await context.sync(); }); -'Excel.PageLayout#setPrintTitleRows:member(1)': +'Excel.PageOrientation:enum': - >- // 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"); + farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -'Excel.PageLayout#zoom:member': +'Excel.PictureFormat:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-page-layout.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-images.yaml await Excel.run(async (context) => { - const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.zoom = { scale: 200 }; + const sheet = context.workbook.worksheets.getItem("Shapes"); + 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.PivotField#clearAllFilters:member(1)': - >- @@ -3229,34 +4246,49 @@ masterTotalRange.formulas = [["All Crates", "=SUM(" + grandTotalRange.address + ")"]]; await context.sync(); }); -'Excel.PivotLayout#altTextDescription:member': +'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 await Excel.run(async (context) => { - // Set the alt text for the displayed PivotTable. + // Add a blank row after each PivotItem in the row hierarchy. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); const pivotLayout = pivotTable.layout; - pivotLayout.altTextTitle = "Farm Sales PivotTable"; - pivotLayout.altTextDescription = "A summary of fruit sales. It is pivoted on farm name, and fruit type. The aggregated data is both the sums of crates sold at the farms and the sums of crates sold wholesale."; - console.log("Adding alt text. Check the PivotTable settings to see the changes."); + pivotLayout.displayBlankLineAfterEachItem(true); + console.log("Setting `PivotLayout.displayBlankLineAfterEachItem` to true."); await context.sync(); }); -'Excel.PivotLayout#displayBlankLineAfterEachItem: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 await Excel.run(async (context) => { - // Add a blank row after each PivotItem in the row hierarchy. + // Repeat the PivotItem labels for each row used by another level of the row hierarchy. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); const pivotLayout = pivotTable.layout; - pivotLayout.displayBlankLineAfterEachItem(true); - console.log("Setting `PivotLayout.displayBlankLineAfterEachItem` to true."); + pivotLayout.repeatAllItemLabels(true); + console.log("Setting `PivotLayout.repeatAllItemLabels` to true."); + + await context.sync(); + }); +'Excel.PivotLayout#altTextDescription:member': + - >- + // 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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.altTextTitle = "Farm Sales PivotTable"; + pivotLayout.altTextDescription = "A summary of fruit sales. It is pivoted on farm name, and fruit type. The aggregated data is both the sums of crates sold at the farms and the sums of crates sold wholesale."; + console.log("Adding alt text. Check the PivotTable settings to see the changes."); await context.sync(); }); @@ -3335,21 +4367,6 @@ console.log(`Preserve the formatting PivotTable after a refresh? - ${preserveFormattingToSet}`); pivotLayout.preserveFormatting = preserveFormattingToSet; - await context.sync(); - }); -'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 - - 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"); - const pivotLayout = pivotTable.layout; - - pivotLayout.repeatAllItemLabels(true); - console.log("Setting `PivotLayout.repeatAllItemLabels` to true."); - await context.sync(); }); 'Excel.PivotLayout#showColumnGrandTotals:member': @@ -3415,47 +4432,101 @@ await context.sync(); }); -'Excel.PivotTable#columnHierarchies:member': +'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 await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); - // Check if the PivotTable already has a column. - const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); - column.load("id"); await context.sync(); + }); +'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 - if (column.isNullObject) { - // Adding the farm column to the column hierarchy automatically removes it from the row hierarchy. - pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); - } else { - pivotTable.columnHierarchies.remove(column); - } - - await context.sync(); + // This function logs information about the data source of a PivotTable. + + await Excel.run(async (context) => { + const worksheet = context.workbook.worksheets.getItem("TotalPivot"); + const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); + + // Retrieve the type and string representation of the data source of the PivotTable. + const pivotTableDataSourceType = pivotTable.getDataSourceType(); + const pivotTableDataSourceString = pivotTable.getDataSourceString(); + await context.sync(); + + // Log the data source information. + console.log("Data source: " + pivotTableDataSourceString.value); + console.log("Source type: " + pivotTableDataSourceType.value); }); -'Excel.PivotTable#dataHierarchies:member': +'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 + + // This function logs information about the data source of a PivotTable. + + await Excel.run(async (context) => { + const worksheet = context.workbook.worksheets.getItem("TotalPivot"); + const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); + + // Retrieve the type and string representation of the data source of the PivotTable. + const pivotTableDataSourceType = pivotTable.getDataSourceType(); + const pivotTableDataSourceString = pivotTable.getDataSourceString(); + await context.sync(); + + // Log the data source information. + console.log("Data source: " + pivotTableDataSourceString.value); + console.log("Source type: " + pivotTableDataSourceType.value); + }); +'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 + + // This function refreshes the "Farm Sales" PivotTable, + + // which updates the PivotTable with changes made to the source table. + + await Excel.run(async (context) => { + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + pivotTable.refresh(); + await context.sync(); + }); +'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 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")); - pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // Check if the PivotTable already has a column. + const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); + column.load("id"); + await context.sync(); + + if (column.isNullObject) { + // Adding the farm column to the column hierarchy automatically removes it from the row hierarchy. + pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); + } else { + pivotTable.columnHierarchies.remove(column); + } await context.sync(); }); -'Excel.PivotTable#delete:member(1)': +'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 await Excel.run(async (context) => { - context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold at Farm")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); await context.sync(); }); @@ -3500,60 +4571,6 @@ } }); } -'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 - - // This function logs information about the data source of a PivotTable. - - await Excel.run(async (context) => { - const worksheet = context.workbook.worksheets.getItem("TotalPivot"); - const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); - - // Retrieve the type and string representation of the data source of the PivotTable. - const pivotTableDataSourceType = pivotTable.getDataSourceType(); - const pivotTableDataSourceString = pivotTable.getDataSourceString(); - await context.sync(); - - // Log the data source information. - console.log("Data source: " + pivotTableDataSourceString.value); - console.log("Source type: " + pivotTableDataSourceType.value); - }); -'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 - - // This function logs information about the data source of a PivotTable. - - await Excel.run(async (context) => { - const worksheet = context.workbook.worksheets.getItem("TotalPivot"); - const pivotTable = worksheet.pivotTables.getItem("All Farm Sales"); - - // Retrieve the type and string representation of the data source of the PivotTable. - const pivotTableDataSourceType = pivotTable.getDataSourceType(); - const pivotTableDataSourceString = pivotTable.getDataSourceString(); - await context.sync(); - - // Log the data source information. - console.log("Data source: " + pivotTableDataSourceString.value); - console.log("Source type: " + pivotTableDataSourceType.value); - }); -'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 - - // This function refreshes the "Farm Sales" PivotTable, - - // which updates the PivotTable with changes made to the source table. - - await Excel.run(async (context) => { - const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); - pivotTable.refresh(); - await context.sync(); - }); 'Excel.PivotTableCollection#add:member(1)': - >- // Link to full sample: @@ -3658,35 +4675,6 @@ } await context.sync(); }); -'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 - - async function sortTopToBottom(criteria: string) { - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); - const range = sheet.getRange("A1:E5"); - - // Find the column header that provides the sort criteria. - const header = range.find(criteria, {}); - header.load("columnIndex"); - await context.sync(); - - 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: @@ -4123,35 +5111,6 @@ 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#getIntersectionOrNullObject:member(1)': - >- // Link to full sample: @@ -4286,22 +5245,6 @@ 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: - 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"); - - // Apply built-in style. - // Styles are in the Home tab ribbon. - range.style = Excel.BuiltInStyle.neutral; - range.format.horizontalAlignment = "Right"; - - await context.sync(); - }); 'Excel.Range#getUsedRangeOrNullObject:member(1)': - >- // Link to full sample: @@ -4380,33 +5323,107 @@ targetRange.format.autofitColumns(); await context.sync(); }); -'Excel.Range#valuesAsJson:member': +'Excel.Range#sort:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml - - // This function creates a formatted number data type, + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/event-column-and-row-sort.yaml - // and sets the format of this data type as a date. + 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) => { - // Get the Sample worksheet and a range on that sheet. - const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); - const dateRange = sheet.getRange("A1"); + // Find the column header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("columnIndex"); + await context.sync(); - // 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.RangeAreas#format:member': + range.sort.apply( + [ + { + key: header.columnIndex, + sortOn: Excel.SortOn.value + } + ], + false /*matchCase*/, + true /*hasHeaders*/, + Excel.SortOrientation.rows + ); + 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#style: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 worksheet = context.workbook.worksheets.getItem("Sample"); + let range = worksheet.getRange("A1:E1"); + + // Apply built-in style. + // Styles are in the Home tab ribbon. + range.style = Excel.BuiltInStyle.neutral; + range.format.horizontalAlignment = "Right"; + + await context.sync(); + }); +'Excel.Range#valuesAsJson:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/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.RangeAreas#format:member': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml @@ -4420,6 +5437,21 @@ const formulaRanges = usedRange.getSpecialCells("Formulas"); formulaRanges.format.fill.color = "lightgreen"; + await context.sync(); + }); +'Excel.RangeCopyType:enum': + - >- + // 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.RangeFormat#textOrientation:member': @@ -4553,6 +5585,54 @@ await context.sync(); }); +'Excel.RangeUnderlineStyle:enum': + - >- + // 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"); + + const productsRange = sheet.getRange("A3:A11"); + productsRange.load("values"); + + await context.sync(); + + // Clear all hyperlinks. + for (let i = 0; i < productsRange.values.length; i++) { + let cellRange = productsRange.getCell(i, 0); + + // Clear the hyperlink. + // This eliminates the hyperlink but does not update text format. + cellRange.clear(Excel.ClearApplyTo.hyperlinks); + + // Update text format. + cellRange.format.font.underline = Excel.RangeUnderlineStyle.none; + cellRange.format.font.color = "#000000"; + } + + await context.sync(); + }); +'Excel.ReadingOrder:enum': + - >- + // 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"); + + await context.sync(); + + console.log("Orientation: " + style.textOrientation); + console.log("Horizontal alignment: " + style.horizontalAlignment); + console.log("Add indent: " + style.autoIndent); + console.log("Reading order: " + style.readingOrder); + console.log("Wrap text: " + style.wrapText); + console.log("Include protection: " + style.includeProtection); + console.log("Shrink to fit: " + style.shrinkToFit); + console.log("Style locked: " + style.locked); + }); 'Excel.RemoveDuplicatesResult#uniqueRemaining:member': - >- // Link to full sample: @@ -4589,6 +5669,24 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + context.workbook.save(Excel.SaveBehavior.prompt); + }); +'Excel.SearchDirection:enum': + - >- + // 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; + + console.log("Search direction = " + searchDirectionToggle); 'Excel.SettableCellProperties#style:member': - >- // Link to full sample: @@ -4698,18 +5796,6 @@ 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); - - await context.sync(); - console.log("Settings changed handler registered."); - }); 'Excel.SettingCollection#getItemOrNullObject:member(1)': - >- // Link to full sample: @@ -4731,6 +5817,18 @@ 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: @@ -4747,51 +5845,6 @@ await context.sync(); shapes.items.forEach((shape) => shape.delete()); - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace); - shape.left = 300; - shape.top = 100; - shape.height = 100; - shape.width = 100; - shape.fill.foregroundColor = "yellow" - await context.sync(); - }); -'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 - - 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(); - await context.sync(); - }); -'Excel.Shape#group:member': - - >- - // 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 shapeGroup = sheet.shapes.getItem("Group").group; - shapeGroup.ungroup(); - console.log("Shapes ungrouped"); - await context.sync(); }); 'Excel.Shape#getAsImage:member(1)': @@ -4818,24 +5871,6 @@ const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Image"); shape.incrementRotation(180); - await context.sync(); - }); -'Excel.Shape#line:member': - - >- - // 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; - line.beginArrowheadLength = Excel.ArrowheadLength.long; - line.beginArrowheadWidth = Excel.ArrowheadWidth.wide; - line.beginArrowheadStyle = Excel.ArrowheadStyle.oval; - - line.endArrowheadLength = Excel.ArrowheadLength.long; - line.endArrowheadWidth = Excel.ArrowheadWidth.wide; - line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; - await context.sync(); }); 'Excel.Shape#incrementLeft:member(1)': @@ -4860,7 +5895,7 @@ shape.incrementTop(25); await context.sync(); }); -'Excel.Shape#lockAspectRatio:member': +'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 @@ -4872,7 +5907,7 @@ shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Shape#scaleHeight: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 @@ -4880,44 +5915,118 @@ 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); + shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); }); -'Excel.Shape#setZOrder:member(1)': +'Excel.Shape#fill:member': - >- // 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-create-and-delete.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Octagon") - shape.setZOrder(Excel.ShapeZOrder.sendBackward); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace); + shape.left = 300; + shape.top = 100; + shape.height = 100; + shape.width = 100; + shape.fill.foregroundColor = "yellow" await context.sync(); }); -'Excel.ShapeCollection#addGeometricShape:member(1)': +'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 await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon); - shape.left = 5; - shape.top = 5; - shape.height = 175; + 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(); }); -'Excel.ShapeCollection#addGroup:member(1)': +'Excel.Shape#group:member': - >- // 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"); - const pentagon = sheet.shapes.getItem("Pentagon"); + + const shapeGroup = sheet.shapes.getItem("Group").group; + shapeGroup.ungroup(); + console.log("Shapes ungrouped"); + + await context.sync(); + }); +'Excel.Shape#line:member': + - >- + // 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; + line.beginArrowheadLength = Excel.ArrowheadLength.long; + line.beginArrowheadWidth = Excel.ArrowheadWidth.wide; + line.beginArrowheadStyle = Excel.ArrowheadStyle.oval; + + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + + 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.ShapeAutoSize:enum': + - >- + // 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"); + textbox.textFrame.autoSizeSetting = Excel.ShapeAutoSize.autoSizeShapeToFitText; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.hexagon); + shape.left = 5; + shape.top = 5; + shape.height = 175; + shape.width = 200; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const square = sheet.shapes.getItem("Square"); + const pentagon = sheet.shapes.getItem("Pentagon"); const octagon = sheet.shapes.getItem("Octagon"); const shapeGroup = sheet.shapes.addGroup([square, pentagon, octagon]); @@ -4989,6 +6098,86 @@ shapeGroup.ungroup(); console.log("Shapes ungrouped"); + await context.sync(); + }); +'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 + + 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.ShapeTextHorizontalAlignment:enum': + - >- + // 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"); + textbox.textFrame.horizontalAlignment = Excel.ShapeTextHorizontalAlignment.center; + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Octagon") + shape.setZOrder(Excel.ShapeZOrder.sendBackward); + await context.sync(); + }); +'Excel.SheetVisibility:enum': + - >- + // 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); + + if (visibleSheets.length > 1) { + console.log(`Hiding worksheet named "${visibleSheets[0].name}"...`); + + visibleSheets[0].visibility = Excel.SheetVisibility.hidden; + + await context.sync(); + + } else { + console.log("Cannot hide the only visible worksheet"); + } + }); +'Excel.ShowAsCalculation:enum': + - >- + // 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"); + const wholesaleDataHierarchy: Excel.DataPivotHierarchy = pivotTable.dataHierarchies.getItem("Sum of Crates Sold Wholesale"); + + farmDataHierarchy.load("showAs"); + wholesaleDataHierarchy.load("showAs"); + await context.sync(); + + // Show the crates of each fruit type sold at the farm as a percentage of the column's total. + let farmShowAs = farmDataHierarchy.showAs; + farmShowAs.calculation = Excel.ShowAsCalculation.percentOfColumnTotal; + farmShowAs.baseField = pivotTable.rowHierarchies.getItem("Type").fields.getItem("Type"); + farmDataHierarchy.showAs = farmShowAs; + + let wholesaleShowAs = wholesaleDataHierarchy.showAs; + wholesaleShowAs.calculation = Excel.ShowAsCalculation.percentOfColumnTotal; + wholesaleShowAs.baseField = pivotTable.rowHierarchies.getItem("Type").fields.getItem("Type"); + wholesaleDataHierarchy.showAs = wholesaleShowAs; await context.sync(); }); 'Excel.ShowAsRule#baseItem:member': @@ -5088,6 +6277,64 @@ slicer.width = 150; await context.sync(); }); +'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 + + async function sortTopToBottom(criteria: string) { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("A1:E5"); + + // Find the column header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("columnIndex"); + await context.sync(); + + range.sort.apply( + [ + { + key: header.columnIndex, + sortOn: Excel.SortOn.value + } + ], + false /*matchCase*/, + true /*hasHeaders*/, + Excel.SortOrientation.rows + ); + await context.sync(); + }); + } +'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 + + async function sortLeftToRight(criteria: string) { + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const range = sheet.getRange("A1:E5"); + + // Find the row header that provides the sort criteria. + const header = range.find(criteria, {}); + header.load("rowIndex"); + await context.sync(); + + range.sort.apply( + [ + { + key: header.rowIndex, + sortOn: Excel.SortOn.value + } + ], + false /*matchCase*/, + true /*hasHeaders*/, + Excel.SortOrientation.columns + ); + await context.sync(); + }); + } 'Excel.Style#delete:member(1)': - >- // Link to full sample: @@ -5104,6 +6351,26 @@ console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); +'Excel.Style#load:member(1)': + - >- + // 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"); + + await context.sync(); + + console.log("Orientation: " + style.textOrientation); + console.log("Horizontal alignment: " + style.horizontalAlignment); + console.log("Add indent: " + style.autoIndent); + console.log("Reading order: " + style.readingOrder); + console.log("Wrap text: " + style.wrapText); + console.log("Include protection: " + style.includeProtection); + console.log("Shrink to fit: " + style.shrinkToFit); + console.log("Style locked: " + style.locked); + }); 'Excel.Style#font:member': - >- // Link to full sample: @@ -5139,26 +6406,6 @@ await context.sync(); }); -'Excel.Style#load:member(1)': - - >- - // 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"); - - await context.sync(); - - console.log("Orientation: " + style.textOrientation); - console.log("Horizontal alignment: " + style.horizontalAlignment); - console.log("Add indent: " + style.autoIndent); - console.log("Reading order: " + style.readingOrder); - console.log("Wrap text: " + style.wrapText); - console.log("Include protection: " + style.includeProtection); - console.log("Shrink to fit: " + style.shrinkToFit); - console.log("Style locked: " + style.locked); - }); 'Excel.StyleCollection#add:member(1)': - >- // Link to full sample: @@ -5209,6 +6456,21 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); +'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 + + await Excel.run(async (context) => { + // Retrieve the worksheet and a table on that worksheet. + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + // Resize the table. + expensesTable.resize("A1:D20"); + + await context.sync(); + }); 'Excel.Table#onChanged:member': - >- // Link to full sample: @@ -5233,25 +6495,10 @@ await context.sync(); console.log("A handler has been registered for table onSelectionChanged event"); }); -'Excel.Table#resize:member(1)': +'Excel.TableChangedEventArgs#details:member': - >- // 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"); - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - // Resize the table. - expensesTable.resize("A1:D20"); - - await context.sync(); - }); -'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 + 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) => { @@ -5359,6 +6606,46 @@ const shapes = context.workbook.worksheets.getItem("Shapes").shapes; const textbox = shapes.getItem("Textbox"); textbox.textFrame.deleteText(); + await context.sync(); + }); +'Excel.ValueFilterCondition:enum': + - >- + // 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. + + // Get the PivotTable. + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // Get the "Farm" field. + const field = pivotTable.hierarchies.getItem("Farm").fields.getItem("Farm"); + + // Filter to only include rows with more than 500 wholesale crates sold. + const filter: Excel.PivotValueFilter = { + condition: Excel.ValueFilterCondition.greaterThan, + comparator: 500, + value: "Sum of Crates Sold Wholesale" + }; + + // Apply the value filter to the field. + field.applyFilter({ valueFilter: filter }); + + await context.sync(); + }); +'Excel.VerticalAlignment:enum': + - >- + // 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"); + // Apply new style. + range.style = ("Diagonal Orientation Style"); + range.format.verticalAlignment = "Justify"; + await context.sync(); }); 'Excel.WebImageCellValue#address:member': @@ -5423,6 +6710,91 @@ await context.sync(); }); +'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#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 + + await Excel.run(async (context) => { + + 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: + 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"); + + const reader = new FileReader(); + + + reader.onload = (event) => { + // Remove the metadata before the base64-encoded string. + const startIndex = reader.result.toString().indexOf("base64,"); + externalWorkbook = 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]); + - >- + // 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#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.close(Excel.CloseBehavior.save); + }); +'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 + + await Excel.run(async (context) => { + context.workbook.save(Excel.SaveBehavior.save); + }); 'Excel.Workbook#properties:member': - >- // Link to full sample: @@ -5493,18 +6865,6 @@ 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: @@ -5530,156 +6890,211 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'Excel.Workbook#getActiveCell:member(1)': +'Excel.WorkbookProtection#protect:member(1)': - >- // 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/50-workbook/data-protection.yaml await Excel.run(async (context) => { - - let myWorkbook = context.workbook; - let activeCell = myWorkbook.getActiveCell(); - activeCell.load("address"); + let workbook = context.workbook; + workbook.load("protection/protected"); await context.sync(); - - console.log("The active cell is " + activeCell.address); + + if (!workbook.protection.protected) { + workbook.protection.protect(); + } }); -'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 - - // Retrieve the file and set up an HTML FileReader element. - - const myFile = document.getElementById("file"); - - const reader = new FileReader(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + let password = await passwordHandler(); - reader.onload = (event) => { - // Remove the metadata before the base64-encoded string. - const startIndex = reader.result.toString().indexOf("base64,"); - externalWorkbook = reader.result.toString().substr(startIndex + 7); - }; + passwordHelper(password); + await Excel.run(async (context) => { + let workbook = context.workbook; + workbook.load("protection/protected"); - // Read the file as a data URL so that we can parse the base64-encoded - string. + await context.sync(); - reader.readAsDataURL(myFile.files[0]); + if (!workbook.protection.protected) { + workbook.protection.protect(password); + } + }); +'Excel.WorkbookProtection#unprotect:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.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(); + let workbook = context.workbook; + workbook.protection.unprotect(); }); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + + let password = await passwordHandler(); + + passwordHelper(password); await Excel.run(async (context) => { - context.workbook.close(Excel.CloseBehavior.save); + let workbook = context.workbook; + workbook.protection.unprotect(password); }); -'Excel.Workbook#save:member(1)': +'Excel.WorkbookRangeAreas#areas: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/42-range/precedents.yaml await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); + // 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.WorkbookProtection#protect:member(1)': +'Excel.Worksheet#showOutlineLevels:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + // This collapses the entire outline. + sheet.showOutlineLevels(1, 1); await context.sync(); + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - if (!workbook.protection.protected) { - workbook.protection.protect(); - } + Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + // This shows the top 3 outline levels; collapsing any additional sublevels. + sheet.showOutlineLevels(3, 3); + await context.sync(); }); +'Excel.Worksheet#getRanges:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.yaml - let password = await passwordHandler(); + await Excel.run(async (context) => { - passwordHelper(password); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); + specifiedRanges.format.fill.color = "pink"; + + 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 workbook = context.workbook; - workbook.load("protection/protected"); + + let myWorkbook = context.workbook; + let sampleSheet = myWorkbook.worksheets.getActiveWorksheet(); + let copiedSheet = sampleSheet.copy("End") + + sampleSheet.load("name"); + copiedSheet.load("name"); await context.sync(); - if (!workbook.protection.protected) { - workbook.protection.protect(password); - } + console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); -'Excel.WorkbookProtection#unprotect:member(1)': +'Excel.Worksheet#findAllOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-find-all.yaml await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); + 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/50-workbook/data-protection.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml - let password = await passwordHandler(); + await Excel.run(async (context) => { + const sheets = context.workbook.worksheets; - passwordHelper(password); + // 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"); - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(password); + 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.WorkbookRangeAreas#areas:member': +'Excel.Worksheet#getPrevious: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/54-worksheet/reference-worksheets-by-relative-position.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(); + const sheets = context.workbook.worksheets; + const currentSheet = sheets.getActiveWorksheet(); + const previousYearSheet = currentSheet.getPrevious(); + const currentTaxDueRange = currentSheet.getRange("C2"); + const previousTaxDueRange = previousYearSheet.getRange("C2"); - console.log(`Direct precedent cells of ${range.address}:`); + currentSheet.load("name"); + previousYearSheet.load("name"); + currentTaxDueRange.load("text"); + previousTaxDueRange.load("text"); - // 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(); + 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#customProperties:member': - >- @@ -5847,29 +7262,6 @@ console.log("The worksheet click handler is registered."); - await context.sync(); - }); -'Excel.Worksheet#showOutlineLevels: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(); - - // This collapses the entire outline. - sheet.showOutlineLevels(1, 1); - await context.sync(); - }); - - >- - // 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(); - - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); await context.sync(); }); 'Excel.Worksheet#pivotTables:member': @@ -5903,19 +7295,6 @@ slicer.name = "Fruit Slicer"; await context.sync(); }); -'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: @@ -5938,44 +7317,6 @@ 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: @@ -5985,60 +7326,6 @@ const sheet = context.workbook.worksheets.getActiveWorksheet(); sheet.showGridlines = true; - await context.sync(); - }); -'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#tabColor:member': @@ -6137,42 +7424,6 @@ } }); } -'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: @@ -6231,6 +7482,42 @@ 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: @@ -6315,6 +7602,26 @@ const sheet = context.workbook.worksheets.getItem("Sample"); sheet.freezePanes.unfreeze(); + await context.sync(); + }); +'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 + + 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.WorksheetProtection#protect:member(1)': From cd866219753898d9aa515dcebf5d92a7c6e32c00 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 5 Aug 2022 10:09:49 -0700 Subject: [PATCH 102/336] [Excel] (Custom functions) Add snippet for ErrorCode enum (#681) * [Excel] (Custom functions) Add snippet for ErrorCode enum * Update snippet, run yarn start * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Removing excel.xlsx mapping for custom functions snippets because the process doesn't work Co-authored-by: Elizabeth Samuel --- playlists-prod/excel.yaml | 9 +++++ playlists/excel.yaml | 9 +++++ .../custom-functions-errors.yaml | 38 ++++++++++++++++++ snippet-extractor-metadata/excel.xlsx | Bin 27610 -> 27539 bytes view-prod/excel.json | 1 + view/excel.json | 1 + 6 files changed, 58 insertions(+) create mode 100644 samples/excel/16-custom-functions/custom-functions-errors.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index e2495f545..5818710b8 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -258,6 +258,15 @@ group: Custom Functions api_set: CustomFunctionsRuntime: 1.1 +- id: excel-custom-functions-errors + name: Custom functions errors + fileName: custom-functions-errors.yaml + description: Returns the "#NUM!" error as part of a 2-dimensional array. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/custom-functions-errors.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.2 - 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 2890be82f..1fbc93305 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -258,6 +258,15 @@ group: Custom Functions api_set: CustomFunctionsRuntime: 1.1 +- id: excel-custom-functions-errors + name: Custom functions errors + fileName: custom-functions-errors.yaml + description: Returns the "#NUM!" error as part of a 2-dimensional array. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/custom-functions-errors.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.2 - 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-functions-errors.yaml b/samples/excel/16-custom-functions/custom-functions-errors.yaml new file mode 100644 index 000000000..e1f5582b1 --- /dev/null +++ b/samples/excel/16-custom-functions/custom-functions-errors.yaml @@ -0,0 +1,38 @@ +order: 5 +id: excel-custom-functions-errors +name: Custom functions errors +description: Returns the "#NUM!" error as part of a 2-dimensional array. +host: EXCEL +api_set: + CustomFunctionsRuntime: 1.2 +script: + content: |- + /** + * Returns the #NUM! error as part of a 2-dimensional array. + * @customfunction + * @param {number} first First parameter. + * @param {number} second Second parameter. + * @param {number} third Third parameter. + * @returns {number[][]} Three results, as a 2-dimensional array. + */ + function returnInvalidNumberError(first, second, third) { + // Use the `CustomFunctions.Error` object to retrieve an invalid number error. + const error = new CustomFunctions.Error( + CustomFunctions.ErrorCode.invalidNumber, // Corresponds to the #NUM! error in the Excel UI. + ); + + // Enter logic that processes the first, second, and third input parameters. + // Imagine that the second calculation results in an invalid number error. + const firstResult = first; + const secondResult = error; + const thirdResult = third; + + // Return the results of the first and third parameter calculations + // and a #NUM! error in place of the second result. + return [[firstResult], [secondResult], [thirdResult]]; + } + language: typescript +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 diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index e1c7e9b31e1bd609033fa27d2e8d77a753bc692d..8fd2ca3a2fdb90493a8479b27e006d8140320a16 100644 GIT binary patch delta 12270 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 KNw@fq`2PTPZnOOW delta 12355 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

U9;V+^!Aa_ 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 Date: Fri, 5 Aug 2022 11:55:18 -0700 Subject: [PATCH 103/336] [Word] Update existing sample to show EventType (#682) --- .../content-control-ondeleted-event.yaml | 2 +- snippet-extractor-metadata/word.xlsx | Bin 15185 -> 15189 bytes snippet-extractor-output/snippets.yaml | 26 ++++++++++++++++-- 3 files changed, 25 insertions(+), 3 deletions(-) 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 35ebadba9..707029581 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.eventType} 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 4591c45cef3ab908b9c2d013bd57fab0c3636b97..cb4f2a483a563dec220c897e0966b40cbeea4f1d 100644 GIT binary patch delta 7160 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 H{{{FTQeJI- diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index f3e3048f5..21f0dabb8 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -12898,7 +12898,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.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); }); } 'Word.ContentControl#tag:member': @@ -12992,7 +12992,18 @@ 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.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); + }); + } +'Word.ContentControlEventArgs#eventType:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + + async function contentControlDeleted(event: Word.ContentControlEventArgs) { + await Word.run(async (context) => { + // Display the deleted content control's ID. + console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); }); } 'Word.CustomPropertyCollection#add:member(1)': @@ -13061,6 +13072,17 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); +'Word.EventType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + + async function contentControlDeleted(event: Word.ContentControlEventArgs) { + await Word.run(async (context) => { + // Display the deleted content control's ID. + console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); + }); + } 'Word.Field#code:member': - >- // Link to full sample: From 4eda12f1c401ca3e788f90329df345622a777281 Mon Sep 17 00:00:00 2001 From: Rick Kirkham Date: Fri, 5 Aug 2022 16:07:38 -0700 Subject: [PATCH 104/336] app-specific basic PPT snippets and reorg folders --- playlists-prod/powerpoint.yaml | 44 ++++++++---- playlists/powerpoint.yaml | 44 ++++++++---- .../powerpoint/basics/basic-api-call-js.yaml | 72 +++++++++++++++++++ .../powerpoint/basics/basic-api-call-ts.yaml | 72 +++++++++++++++++++ .../basics/basic-common-api-call.yaml | 2 +- .../create-presentation.yaml | 1 - .../{basics => images}/insert-image.yaml | 2 +- .../{basics => images}/insert-svg.yaml | 2 +- .../slide-management/add-slides.yaml | 1 + .../get-slide-metadata.yaml | 0 .../slide-management/insert-slides.yaml | 1 + view-prod/powerpoint.json | 10 +-- view/powerpoint.json | 10 +-- 13 files changed, 221 insertions(+), 40 deletions(-) create mode 100644 samples/powerpoint/basics/basic-api-call-js.yaml create mode 100644 samples/powerpoint/basics/basic-api-call-ts.yaml rename samples/powerpoint/{basics => document}/create-presentation.yaml (99%) rename samples/powerpoint/{basics => images}/insert-image.yaml (99%) rename samples/powerpoint/{basics => images}/insert-svg.yaml (99%) rename samples/powerpoint/{basics => slide-management}/get-slide-metadata.yaml (100%) diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 400c1e38e..05da11fbd 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -1,3 +1,19 @@ +- 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 + 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' +- 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 + 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' - id: powerpoint-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -16,33 +32,25 @@ Creates a new, empty presentation and creates a new presentation by copying an existing one. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/create-presentation.yaml - group: Basics + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/document/create-presentation.yaml + group: Document api_set: PowerPoint: 1.1 -- 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).' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/get-slide-metadata.yaml - group: Basics - api_set: {} - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml description: Inserts an image to the current slide. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-image.yaml - group: Basics + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-image.yaml + group: Images api_set: {} - id: powerpoint-basics-insert-svg name: Insert SVG fileName: insert-svg.yaml description: Inserts an SVG image using an XML string. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/insert-svg.yaml - group: Basics + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/images/insert-svg.yaml + group: Images api_set: {} - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia @@ -78,6 +86,14 @@ group: Slide Management api_set: PowerPointApi: '1.2' +- 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).' + 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-tags name: Work with tags fileName: tags.yaml diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index 3510c57b9..cf29f0842 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -1,3 +1,19 @@ +- 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 + 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' +- 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 + 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' - id: powerpoint-basics-basic-common-api-call name: Basic API call (Office 2013) fileName: basic-common-api-call.yaml @@ -16,33 +32,25 @@ Creates a new, empty presentation and creates a new presentation by copying an existing one. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/create-presentation.yaml - group: Basics + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/document/create-presentation.yaml + group: Document api_set: PowerPoint: 1.1 -- 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).' - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/get-slide-metadata.yaml - group: Basics - api_set: {} - id: powerpoint-basics-insert-image name: Insert Image fileName: insert-image.yaml description: Inserts an image to the current slide. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-image.yaml - group: Basics + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-image.yaml + group: Images api_set: {} - id: powerpoint-basics-insert-svg name: Insert SVG fileName: insert-svg.yaml description: Inserts an SVG image using an XML string. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/insert-svg.yaml - group: Basics + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/images/insert-svg.yaml + group: Images api_set: {} - id: powerpoint-scenarios-searches-wikipedia-api name: Search Wikipedia @@ -78,6 +86,14 @@ group: Slide Management api_set: PowerPointApi: '1.2' +- 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).' + 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-tags name: Work with tags fileName: tags.yaml diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml new file mode 100644 index 000000000..b43a99e5d --- /dev/null +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -0,0 +1,72 @@ +order: 2 +id: powerpoint-basics-basic-api-call-js +name: Basic API call (JavaScript) +description: Performs a basic PowerPoint API call using JavaScript +host: POWERPOINT +api_set: PowerPointApi '1.4' +script: + content: | + $("#run").click(() => tryCatch(run)); + + function run() { + // This function gets the collection of shapes on the first slide, + // and adds a text box to the collection, while specifying its text, + // location, and size. Then it names the text box. + return PowerPoint.run(function(context) { + const shapes = context.presentation.slides.getItemAt(0).shapes; + const textbox = shapes.addTextBox("Hello!", { + left: 100, + top: 300, + height: 300, + width: 450 + }); + textbox.name = "Textbox"; + + return 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 executes a code snippet that adds a text box to the first slide in 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; + } + 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/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml new file mode 100644 index 000000000..20de3c96c --- /dev/null +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -0,0 +1,72 @@ +order: 1 +id: powerpoint-basics-basic-api-call-ts +name: Basic API call (TypeScript) +description: Performs a basic PowerPoint API call using TypeScript +host: POWERPOINT +api_set: PowerPointApi '1.4' +script: + content: | + $("#run").click(() => tryCatch(run)); + + const run: Function = async () => { + // This function gets the collection of shapes on the first slide, + // 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: PowerPoint.ShapeCollection = context.presentation.slides.getItemAt(0).shapes; + const shapeOptions: PowerPoint.ShapeAddOptions = { + left: 100, + top: 300, + height: 300, + width: 450 + }; + const textbox: PowerPoint.Shape = shapes.addTextBox("Hello!", shapeOptions); + + await context.sync(); + }); + } + + /** Default helper for invoking an action and handling errors. */ + const tryCatch: (callback: Function) => void = async (callback: Function) => { + 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 executes a code snippet that adds a text box to the first slide in 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; + } + 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/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index edc6ba604..fc0d07ea2 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -1,4 +1,4 @@ -order: 1 +order: 3 id: powerpoint-basics-basic-common-api-call name: Basic API call (Office 2013) description: Executes a basic PowerPoint API call using the "common API" syntax (compatible with Office 2013). diff --git a/samples/powerpoint/basics/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml similarity index 99% rename from samples/powerpoint/basics/create-presentation.yaml rename to samples/powerpoint/document/create-presentation.yaml index 3d20e4346..6c9876e4e 100644 --- a/samples/powerpoint/basics/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -1,4 +1,3 @@ -order: 2 id: powerpoint-create-presentation name: Create presentation description: 'Creates a new, empty presentation and creates a new presentation by copying an existing one.' diff --git a/samples/powerpoint/basics/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml similarity index 99% rename from samples/powerpoint/basics/insert-image.yaml rename to samples/powerpoint/images/insert-image.yaml index 8384b2407..4b1d7f071 100644 --- a/samples/powerpoint/basics/insert-image.yaml +++ b/samples/powerpoint/images/insert-image.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 1 id: powerpoint-basics-insert-image name: Insert Image description: Inserts an image to the current slide. diff --git a/samples/powerpoint/basics/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml similarity index 99% rename from samples/powerpoint/basics/insert-svg.yaml rename to samples/powerpoint/images/insert-svg.yaml index 40cf28a52..b4f8cacf4 100644 --- a/samples/powerpoint/basics/insert-svg.yaml +++ b/samples/powerpoint/images/insert-svg.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 2 id: powerpoint-basics-insert-svg name: Insert SVG description: Inserts an SVG image using an XML string. diff --git a/samples/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index 4e36e55a6..75fe109b1 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -1,3 +1,4 @@ +order: 1 id: powerpoint-add-slides name: Add slides to a presentation description: Adds a slide and optionally specifies the slide master and layout. diff --git a/samples/powerpoint/basics/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml similarity index 100% rename from samples/powerpoint/basics/get-slide-metadata.yaml rename to samples/powerpoint/slide-management/get-slide-metadata.yaml diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 9462d2fd3..6c25e95b0 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -1,3 +1,4 @@ +order: 2 id: powerpoint-insert-slides name: Insert slides from other presentation description: Inserts slides from another PowerPoint file into the current presentation. diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index e4fb70123..6555faa19 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -1,12 +1,14 @@ { + "powerpoint-basics-basic-api-call-ts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/basics/basic-api-call-ts.yaml", + "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/basics/create-presentation.yaml", - "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-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-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-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", "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 e25f23853..68b61b225 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -1,12 +1,14 @@ { + "powerpoint-basics-basic-api-call-ts": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/basics/basic-api-call-ts.yaml", + "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/basics/create-presentation.yaml", - "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-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-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-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", "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/tags/tags.yaml" } \ No newline at end of file From 9895becd66d24158ca69f0c4364441cd353a63cc Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 9 Aug 2022 10:27:38 -0700 Subject: [PATCH 105/336] [Outlook] (enum) Add Script Lab samples to MailboxEnums (#685) * Add snippet for MailboxEnums.ComposeType and clarify getComposeType function * Add snippets for ComposeType, Days, ItemNotificationMessageType, RecipientType, RecurrenceTimeZone, and RecurrenceType * Apply suggestion from review --- .../get-to-message-read.yaml | 47 ++- .../35-notifications/add-getall-remove.yaml | 10 +- ...-set-recurrence-appointment-organizer.yaml | 6 +- .../work-with-client-signatures.yaml | 4 +- snippet-extractor-metadata/outlook.xlsx | Bin 21265 -> 21563 bytes snippet-extractor-output/snippets.yaml | 345 ++++++++++++++++-- 6 files changed, 366 insertions(+), 46 deletions(-) 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 3e2f567d3..ce34c880e 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 @@ -10,11 +10,46 @@ script: $("#get-to").click(getTo); function getTo() { - const msgTo = Office.context.mailbox.item.to; - console.log("Message sent to:"); - for (let i = 0; i < msgTo.length; i++) { - console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); - } + const msgTo = Office.context.mailbox.item.to; + const distributionLists = []; + const externalRecipients = []; + const internalRecipients = []; + const otherRecipients = []; + for (let i = 0; i < msgTo.length; i++) { + switch (msgTo[i].recipientType) { + case Office.MailboxEnums.RecipientType.DistributionList: + distributionLists.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.ExternalUser: + externalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.User: + internalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.Other: + otherRecipients.push(msgTo[i]); + } + } + + if (distributionLists.length > 0) { + console.log("Distribution Lists:"); + distributionLists.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + if (externalRecipients.length > 0) { + console.log("External Recipients:"); + externalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + if (internalRecipients.length > 0) { + console.log("Internal Recipients:"); + internalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + if (otherRecipients.length > 0) { + console.log("Other Recipients:"); + otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } } language: typescript template: @@ -27,7 +62,7 @@ template:

Try it out

language: html diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 479da2944..18a34b466 100644 --- a/samples/outlook/35-notifications/add-getall-remove.yaml +++ b/samples/outlook/35-notifications/add-getall-remove.yaml @@ -18,7 +18,7 @@ script: const id = $("#notificationId").val(); const details = { - type: "progressIndicator", + type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, message: "Progress indicator with id = " + id }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); @@ -28,7 +28,7 @@ script: const id = $("#notificationId").val(); const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, icon: "icon1", persistent: false @@ -40,7 +40,7 @@ script: const id = $("#notificationId").val(); const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, icon: "icon1", persistent: true @@ -52,7 +52,7 @@ script: const id = $("#notificationId").val(); const details = { - type: "errorMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.ErrorMessage, message: "Error notification message with id = " + id }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); @@ -67,7 +67,7 @@ script: Office.context.mailbox.item.notificationMessages.replaceAsync( id, { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Notification message with id = " + id + " has been replaced with an informational message.", icon: "icon2", persistent: false 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 e175bc619..46bde09e2 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -49,9 +49,9 @@ script: let pattern : Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: "weekly", - recurrenceProperties: { interval: 1, days: ["tue", "thu"], firstDayOfWeek: "sun" }, - recurrenceTimeZone: { name: "Pacific Standard Time" } + recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, + recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { diff --git a/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml b/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml index 4d6327a33..cb64a63b0 100644 --- a/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml +++ b/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml @@ -36,7 +36,7 @@ script: } function getComposeType() { - // Get the compose type of the current item (mail only). + // Get the compose type of the current message. Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { console.log( @@ -109,7 +109,7 @@ template:
disableClientSignature
diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 37e5c850611118fe308415fbfac3df529ee81d16..0a1c6b39a7693808bf9e37c8ef5bf524838974ab 100644 GIT binary patch delta 12529 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 LHLRHOf7JRv(FHqL delta 12254 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 m0GK- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + + // Get the compose type of the current message. + + Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log( + "getComposeTypeAsync succeeded with composeType: " + + asyncResult.value.composeType + + " and coercionType: " + + asyncResult.value.coercionType + ); + } else { + console.error(asyncResult.error); + } + }); +'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 + + // Important: Can only set the recurrence pattern of an appointment series. + + + const currentDate = new Date(); + + let seriesTimeObject : Office.SeriesTime; + + // Set series start date to tomorrow. + + seriesTimeObject.setStartDate( + currentDate.getFullYear(), + currentDate.getMonth(), + currentDate.getDay() + 1 + ); + + // Set series end date to 1 month from now. + + seriesTimeObject.setEndDate( + currentDate.getFullYear(), + currentDate.getMonth() + 1, + currentDate.getDay() + ); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. + + seriesTimeObject.setDuration(30); + + + let pattern : Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, + recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; + } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); + }); 'Office.MailboxEnums.DelegatePermissions:enum': - >- // Link to full sample: @@ -10186,6 +10257,20 @@ 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + + const id = $("#notificationId").val(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.ErrorMessage, + message: "Error notification message with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); 'Office.MailboxEnums.LocationType:enum': - >- // Link to full sample: @@ -10210,6 +10295,164 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); +'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 + + const msgTo = Office.context.mailbox.item.to; + + const distributionLists = []; + + const externalRecipients = []; + + const internalRecipients = []; + + const otherRecipients = []; + + for (let i = 0; i < msgTo.length; i++) { + switch (msgTo[i].recipientType) { + case Office.MailboxEnums.RecipientType.DistributionList: + distributionLists.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.ExternalUser: + externalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.User: + internalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.Other: + otherRecipients.push(msgTo[i]); + } + } + + + if (distributionLists.length > 0) { + console.log("Distribution Lists:"); + distributionLists.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (externalRecipients.length > 0) { + console.log("External Recipients:"); + externalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (internalRecipients.length > 0) { + console.log("Internal Recipients:"); + internalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (otherRecipients.length > 0) { + console.log("Other Recipients:"); + otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } +'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 + + // Important: Can only set the recurrence pattern of an appointment series. + + + const currentDate = new Date(); + + let seriesTimeObject : Office.SeriesTime; + + // Set series start date to tomorrow. + + seriesTimeObject.setStartDate( + currentDate.getFullYear(), + currentDate.getMonth(), + currentDate.getDay() + 1 + ); + + // Set series end date to 1 month from now. + + seriesTimeObject.setEndDate( + currentDate.getFullYear(), + currentDate.getMonth() + 1, + currentDate.getDay() + ); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. + + seriesTimeObject.setDuration(30); + + + let pattern : Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, + recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; + } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); + }); +'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 + + // Important: Can only set the recurrence pattern of an appointment series. + + + const currentDate = new Date(); + + let seriesTimeObject : Office.SeriesTime; + + // Set series start date to tomorrow. + + seriesTimeObject.setStartDate( + currentDate.getFullYear(), + currentDate.getMonth(), + currentDate.getDay() + 1 + ); + + // Set series end date to 1 month from now. + + seriesTimeObject.setEndDate( + currentDate.getFullYear(), + currentDate.getMonth() + 1, + currentDate.getDay() + ); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. + + seriesTimeObject.setDuration(30); + + + let pattern : Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, + recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; + } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); + }); 'Office.MailboxEnums.RestVersion:enum': - >- // Link to full sample: @@ -10458,7 +10701,7 @@ const details = { - type: "progressIndicator", + type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, message: "Progress indicator with id = " + id }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -10471,7 +10714,7 @@ const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, icon: "icon1", persistent: false @@ -10486,7 +10729,7 @@ const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, icon: "icon1", persistent: true @@ -10507,7 +10750,7 @@ Office.context.mailbox.item.notificationMessages.replaceAsync( id, { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Notification message with id = " + id + " has been replaced with an informational message.", icon: "icon2", persistent: false @@ -10831,7 +11074,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - // Get the compose type of the current item (mail only). + // Get the compose type of the current message. Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { @@ -10998,10 +11241,52 @@ const msgTo = Office.context.mailbox.item.to; - console.log("Message sent to:"); + const distributionLists = []; + + const externalRecipients = []; + + const internalRecipients = []; + + const otherRecipients = []; for (let i = 0; i < msgTo.length; i++) { - console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + switch (msgTo[i].recipientType) { + case Office.MailboxEnums.RecipientType.DistributionList: + distributionLists.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.ExternalUser: + externalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.User: + internalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.Other: + otherRecipients.push(msgTo[i]); + } + } + + + if (distributionLists.length > 0) { + console.log("Distribution Lists:"); + distributionLists.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (externalRecipients.length > 0) { + console.log("External Recipients:"); + externalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (internalRecipients.length > 0) { + console.log("Internal Recipients:"); + internalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (otherRecipients.length > 0) { + console.log("Other Recipients:"); + otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); } 'Office.MessageRead#notificationMessages:member': - >- @@ -11012,7 +11297,7 @@ const details = { - type: "progressIndicator", + type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, message: "Progress indicator with id = " + id }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -11025,7 +11310,7 @@ const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, icon: "icon1", persistent: false @@ -11040,7 +11325,7 @@ const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, icon: "icon1", persistent: true @@ -11061,7 +11346,7 @@ Office.context.mailbox.item.notificationMessages.replaceAsync( id, { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Notification message with id = " + id + " has been replaced with an informational message.", icon: "icon2", persistent: false @@ -11624,7 +11909,7 @@ const details = { - type: "progressIndicator", + type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, message: "Progress indicator with id = " + id }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -11637,7 +11922,7 @@ const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Non-persistent informational notification message with id = " + id, icon: "icon1", persistent: false @@ -11652,7 +11937,7 @@ const details = { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Persistent informational notification message with id = " + id, icon: "icon1", persistent: true @@ -11667,7 +11952,7 @@ const details = { - type: "errorMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.ErrorMessage, message: "Error notification message with id = " + id }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, @@ -11688,7 +11973,7 @@ Office.context.mailbox.item.notificationMessages.replaceAsync( id, { - type: "informationalMessage", + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, message: "Notification message with id = " + id + " has been replaced with an informational message.", icon: "icon2", persistent: false @@ -11945,9 +12230,9 @@ let pattern : Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: "weekly", - recurrenceProperties: { interval: 1, days: ["tue", "thu"], firstDayOfWeek: "sun" }, - recurrenceTimeZone: { name: "Pacific Standard Time" } + recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, + recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; From 223189d82e3d32e5f706ee6d75421451ad249451 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 11 Aug 2022 16:15:22 -0700 Subject: [PATCH 106/336] [excel] (Custom Functions) Allow for mapping for custom functions and their JSDoc (#687) * Allow for mapping for custom functions and their JSDoc * Remove extra blank line --- config/build.documentation.ts | 29 +++++++++++++++------ config/helpers.ts | 10 ------- snippet-extractor-metadata/excel.xlsx | Bin 27539 -> 28166 bytes snippet-extractor-metadata/outlook.xlsx | Bin 21563 -> 22659 bytes snippet-extractor-metadata/powerpoint.xlsx | Bin 12261 -> 12284 bytes snippet-extractor-metadata/word.xlsx | Bin 15189 -> 15555 bytes snippet-extractor-output/snippets.yaml | 25 ++++++++++++++++++ 7 files changed, 46 insertions(+), 18 deletions(-) diff --git a/config/build.documentation.ts b/config/build.documentation.ts index 84e355342..154bc03c2 100644 --- a/config/build.documentation.ts +++ b/config/build.documentation.ts @@ -3,17 +3,17 @@ import * as fs from 'fs'; import * as jsyaml from 'js-yaml'; import { Dictionary } from './helpers'; -import { SnippetProcessedData, banner, readDir, officeHostsToAppNames, writeFile, rmRf, mkDir } from './helpers'; +import { SnippetProcessedData, readDir, writeFile, rmRf, mkDir } from './helpers'; import { status } from './status'; const ExcelJS = require('exceljs'); const SNIPPET_EXTRACTOR_METADATA_FOLDER_NAME = 'snippet-extractor-metadata'; interface MappingFileRowData { - class: string; member: string; memberId: string, snippetId: string; snippetFunction: string + package: string, class: string; member: string; memberId: string, snippetId: string; snippetFunction: string } const headerNames: (keyof MappingFileRowData)[] = - ['class', 'member', 'memberId', 'snippetId', 'snippetFunction']; + ['package', 'class', 'member', 'memberId', 'snippetId', 'snippetFunction']; export async function buildReferenceDocSnippetExtracts( @@ -45,9 +45,6 @@ async function buildSnippetExtractsPerHost( snippetIdsToFilenames: { [key: string]: string }, accumulatedErrors: Array ): Promise<{ [key: string]: string[] }> { - const hostName = officeHostsToAppNames[ - filename.substr(0, filename.length - '.xlsx'.length).toUpperCase()]; - banner(`Extracting reference-doc snippet bits for ${hostName}`); const lines: MappingFileRowData[] = await new Promise(async (resolve: (data: MappingFileRowData[]) => void, reject) => { @@ -90,8 +87,9 @@ async function buildSnippetExtractsPerHost( .filter(item => item) .forEach((text, index) => { const row = lines[index]; - let fullName; + let hostName = row.package; + let fullName; if (row.member) { /* If the mapping is for a field */ fullName = `${hostName}.${row.class.trim()}#${row.member.trim()}:member`; if (row.memberId) { @@ -131,13 +129,28 @@ function getExtractedDataFromSnippet( if (arrayIndex < 0) { throw new Error(`Invalid entry in the metadata mapping file -- snippet function "${row.snippetFunction}" does not exist within snippet "${filename}"`); } + + let jsDocCommentIndex = -1; + if (arrayIndex > 0 && fullSnippetTextArray[arrayIndex - 1].indexOf('*/') >= 0) { + for (let i = arrayIndex - 1; i >= 0; i--) { + if (fullSnippetTextArray[i].indexOf('/**') >= 0) { + jsDocCommentIndex = i; + break; + } + } + } + const functionDeclarationLine = fullSnippetTextArray[arrayIndex]; const functionHasNoParams = functionDeclarationLine.indexOf(targetText + ')') >= 0; const spaceFollowedByWordsRegex = /^(\s*)(.*)$/; const preWhitespaceCount = spaceFollowedByWordsRegex.exec(functionDeclarationLine)[1].length; const targetClosingText = ' '.repeat(preWhitespaceCount) + '}'; - fullSnippetTextArray.splice(0, arrayIndex + (functionHasNoParams ? 1 : 0)); + if (jsDocCommentIndex >= 0) { + fullSnippetTextArray.splice(0, jsDocCommentIndex); + } else { + fullSnippetTextArray.splice(0, arrayIndex + (functionHasNoParams ? 1 : 0)); + } const closingIndex = fullSnippetTextArray.findIndex(text => text.indexOf(targetClosingText) === 0); if (closingIndex < 0) { diff --git a/config/helpers.ts b/config/helpers.ts index af8dfa7f5..1306d2ad8 100644 --- a/config/helpers.ts +++ b/config/helpers.ts @@ -7,16 +7,6 @@ import { console } from './status'; import * as rimraf from 'rimraf'; import { isObject, isNil, isString, isEmpty } from 'lodash'; -export const officeHostsToAppNames = { - 'ACCESS': 'Access', - 'EXCEL': 'Excel', - 'ONENOTE': 'OneNote', - 'OUTLOOK': 'Office', - 'POWERPOINT': 'PowerPoint', - 'PROJECT': 'Project', - 'WORD': 'Word' -}; - export interface SnippetFileInput { file_name: string; relativePath: string; diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 8fd2ca3a2fdb90493a8479b27e006d8140320a16..8f455667d6928cf855cea6a4c9d2d3e5870dfb8e 100644 GIT binary patch delta 19755 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 C%DL45 delta 19104 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 diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 0a1c6b39a7693808bf9e37c8ef5bf524838974ab..764dadc9ccef45eea4640072c06df8fdaa6d7793 100644 GIT binary patch delta 13658 zcmZ8|WmH^2(m>0y85Z-cK7XW{S6&Z4PBLnfJAXCdWZuH1;rDehd=}D_=e$eel4Yd7U|l=OzpEO zr*Yclsl(mwJm9heokbIpZgxe9Cyh7*vK!3Q zLi7#o>rw;jUkv~80|MfZUF|plm&{&Rh9ke&M2{}uYQ3xKb<&bRy0kJ8(f?kY!+CT6 z*RWN$jC&`8UI5oPZnQKs71(78u7@Z_6Mla zl(wXoRCAp}B-7opUwXx7zv@Czy3f3FL~oX(B7-js7_7SPuWw-Jz%v%)a5dL{?ODB1 zo;R9+#pj+F7W)*cT5`v6stc0Y{_Y`EY{2@dgI%uhoAf@9Ur@?dmJztqIp<0>(U@42 z9>HejBl8PGzCWISC3gDP-%`E*+7b9xYDb^_@tIgS)lt2fS>nIo#kWCBv+?<5%~vLe z@Qg;V(Ej%0z#1fx*X4rVKo-f8B(&14=@1A5OzjRFQimZSef^VOLG*{9i?tt#iv%lj zn;tFfOXgjEnMc_ZE!@&=t;Y(@r)Vv+#c)dy)*nK7X; zv!)XJ4yN@l+YwO&ny*$8YP4JU&{FruQZd)kC;ir)R)bC=gqwFnZNa3^!JePABlJOcmzW+mh2FOzoQg zz3jE6ov&SoB0xZjniw8P;kxD@=OX{@Zie!{qZr7?n%gv}zjH19p2Q_Jr+@eyMoZ@) zr7$$diK?ZR(JfL_{(ayE1D=ypvvd7Ioy^K#F92Irz+n|LK3BXid=X5{n84$2hJGyZ zsij2eUNDs2wzd9D?CnY+?p4@U8j3~6v<(-JN%mKJGp#tzMZA6=d zxE(-czM-#ikcH-ryr#3i+o|$$QZndK;C7bd>KrfcBPwm4XH63kt~h3ly+e_(GMMGe zVep9Tb9N#zEx6bjM-@cxZ%ar+f4R@@6VTzZbfhsEol{Et`v+kcBeYWsN=w{Tvx{#R zC0QzyT^ESIp2z&y#Ppf)lM8}d6k!i54H{q;+}TCRyKhPz6`OlqC1ZH;Tlor~qX9X+ zth6%k?=e_3S`+o}vJGOb@ziFf*qFt^LEf)|wKU1S1jT7PyN;nX+RbA*4Y!kE6I%-p zvf8UEsBuS3#Vn$j)|!;ESpUxG&8BG{3E}&NGfyinP*^p$ZK={y%wKYXo+l{c#P@*E z^Cv_26~>UlcFf4v+HT8`O*&`VSTfpKBs@QAcmXE((^#w~VI27Y`DU&Vdx{P9SX9J1 zSYxbgOpOILLUPL(H!AxC`JKZzV}8DnPADj-x3~ZNC1kEuP&LK|8i=PLXp+>tz1Qmc zQ}-nBZUx$RkCWg3)bE+8rl|E1Fk_9+^!NbJKFm{QEKaR8-Rb+b+UNl2cm936T{QUn z*!lMNC>wZH?s&O*B{O*Y>-SvQN!03$7O_q6&VuKr<-pTwDBd-~1DvH+gD^+Zse=X2OLSKN1&==qDx3$Qzs}D0 z%}`|FKy~&gI}CLHch4k0_(XrgrYUR*_Bz@Svl1&Ag(|XRFLEI|AY*!Rph9<4d>GrJ z_}?-f|9zN_1~yLsZn~hk$$_#ddvdd(sjYL$HVXC|<);^@G?~+tcUzcZ+2-&qQNKhl z5-6HD(Ga75V-R;|5+2mQ&&7Os9L#;;QzkiC`JDT_SQ3bGov~HViRKyg`{IM}*8DqY zeJSd;P+n~JVT{!e2z?T&p;4Rb6=`-D9Zb z_}uSiY`fdIV$Te-NV#*@Zwl(9!}^g83lNy{Zb<$2I02LIGq6wEo**Ck9A)DI7|kQ$ zA-eVuZLet}05)Mgl+@rU^G5koLEmTis+oXrC2#cdt6c7PbnTb|-uL>_`3af@Q0m@u z^v>r32_q5f1ix-1ZVuaM5)#C$%JXPN>69^aUGKz-$b}%TEd~VRTSyltXqG@NEE5I9 zs7o|zYM6h#oJO|FUH=%b%uJoc{5|oI!1uGm?IPYWfK4KrNQcEYQ(KrXYeUlB5>tgC zelffr?MHsL`kbN}`nkIHVlLsgRXJsD&Tru=EWgk+t5ldUkGsc7BR@}7m-!TN5KYBk zN3Kf={Bk*+3JoV~#N@q@Y*hHs6-qaV3vt;n-;ow#zBg(P@B z;R)i2w^8i7ZfS)+^c97}oZ5ivr84@*S#8M|k;eeTJ=#AAr?fA0K-;6tQTB&pvaXiR z$Zm^LK%3EkSdOdtQL*xJVK(7UarGbQvYP?Guz;46C|>R`>L_Dyo0-~8`}lV#nKTKU zL0RE3Z1+mfox2sq6P7&qm()?ZUYP^bC>Zm#YBKcQ^C}Jo51Bh@>PoY$2fZJ}JT~DU zA~^hl4@kt=461Auf691T6Ce{V%8IEE?hfy}3$)o5CAZH6DO_+XC{OsGJm{k!N`S0r zRKR9UqYi-|Ro0ME8J%nV%1&Aws8w?xY9T#QoU~ah?>)V_dWGz10;LE2I7H?8gEc8! za-MB=_#qqgeq1N!oqArv{&IgBLe&Jdc=!eObg!%A7We*jRvP_qZ3Hzs1c*`2b#ZO* zD%UBl`ye066FCFv>l5Q~Sj|Tus(a6r^m-A`_JK{v{T7<<<&J)SRvV#_%y7#>akMf9 zu4WKU^V|2#QJ3sEfpRx77RF=pri|0;>X^WrpJ$Accu+pG$uqpqn#WKJM*&#M-)c1a zT}K?o4j?wxPfWaEAz;rPVvt1HUmJ9_@X`NK#qCG0R2w7y-f$0LI1hL+tqng)*hra7 z??{MVj&2U}Fwm?Jc5EKn{+O;t({&bzeOJg*pm$g84qY~jV3zkH*2=mj{$SKPQoMMg zvQkhVtv*?$AFw(666VeZ-E*G#TH+_&R=0rpWeEHEE^yPinzuD3Pyr#obxDIJe$p#; zsc25dh6FPo%z7Y$$q!J_{pp886uxnHS|>%Lf1J@qfP)?-k-9P7vmiq=_Z_3pP%xusj-tR&`#984v)stB`dreFDnt0Dp_T=M zCi@zLKc54VRhWU&Y>S(;{t*IiV1(^?CW22YAot@8JD&VH03yB&)W*!3B6X$>PY|~7 zNtLkW2gN*zN{>J~!6!v%#GUJ`Ta6y5LBF!vNQG*4&QFU*PXWQf37y)Q3rx3jekFR~ z$$;%$L7kXGiB&hH6JIC1OfRmpp+)ODBm{PPw_MzSog4xF?CFqhy&lNlRiuCR% zVLfGH72x?kfXGt4|=!vb~ywH1Fq5zV(qYgg9+aM(o>N|1pW6!)||mq`iv;=f#EP)fgU76 z`oHxs7!hQig!oVWr)p}q;j8ZL09olaVv|c4&GR0%2UCwT9mZ^oA@`a=+#lY%$}4*W zHuzoA_NYlF_)H5w1F+&$*bm3}I9+7Jk|F#dC3@)(Nnde-x5`WL#=4a08B*m{*Rg-odE{p zp!Ac_ko}msOgOi>%lf(k{VfC#Cs3m^A~(J2p3hQkw1Hvu=Ti38#5tgXe}w7uz5vyK zRFSutEaQ~YsrlozBVyCwI(Tk3ZHBW*a}jF6D+puS%kMC4*~`-WZxzwf_x2bG6|4gs z8RD)HoNh9p!G79*O{Hh7toBdAep#XF1id=wdm;k_D?1DReid|o=`>h4n+wGz>G1^q zmAmPal~{Pgi$WdYM$WCX?plI@4nsFivd+ri8_j%j^&$a2Pd_KY% zrRwr-6%jj{x%qu1dw^R#GA}cJ{-~0BL>xiW)suKw^$i>(7O-Zv)VD&S&i&8BSrDEa z#KS;^>On4@s>#Iao_QI$3i@f+XmM=AJ>+TC6Qex56Bn~G$6Mui8)>dglVvzfpgGrG z^<+?uY3X1@(`O)@1ig5elRAB(+7_lvm%{Ia^rjyES(lJOw;dAFIJpB&E@<_Nve%{4 zCA=|X%-Q$22hZv6jU>Nhs3;fLqh%F;Pb3RW@XZ5D`rkVh#w$Q0`MfAU9TFc?c8$c$ zlRWdz`j5X*bbTB3HE|&AOrYTf2GbC$t^z7zubY^bE=;~NmVFoaMo;1z?S=v2r|OT? z_y3r&>zm)$I`OyUggdM9fM@io3rb$qnDdpQ7`XdvBv#x)BBK}s>2qDxG2+*0`pMsf_jM_Yp@nM+*M_EEPX@#~IlL8z z#SVc%ibw^WR+sc$^*yJLjl`t5AkI!#@CSl~BkBTMNM@WMW{*q1g&FE;4)(;9J5i{5 z^Z_Z$%NVWs9P&0KZ2fpitR&L`0*MfkO7xpL52T-qZfx}WI-Cgs5pNG~F{L+7iPAj6 ztNd>f{N@QgGWsJG?d$K1PCC#J993&f$5pL7sfN$wZZ5N^e<-Pgq-{vAg1~IJF;VA; zt1AkUuq{&Mt_Q{MR})xQ?r!jGbIcN$0K;3q$Uk3BRu@#b(4}Y_x6-ks_bAn+`$qd^ zH@VtP+8BpP(Dw0rzIFt$W%7;W`sU}WIFRa3s`8C^_L*6A#0==9FMFl3lE$NF&!mCm z!-}skOX;_3L8LooL1$at#Cd5PMq}2q;E!Ibd&?ZF&-N$fUOao8FX|>yZ3ZtP4>rQ{;mq5q5B6D7Re542;njkWIuX?*+rhS5kz^hP& zia(NsRx}xM2iPMg;9B2Tso}Djw2)d58mzK_8Dv9h1-Fc^5V3!Klp6SyP)?XjWOHVHR^E-KlsJ*aH{} z-t6~V54B@yiLcTfzdR05T4roh*dupJ)D-U1M7`*GZ?s0D@4J85j|J|L14%VwhrVAl z(uiDw_eAWv!OM6)jVNBI*;NT^+!AA&B1Z4S6LV{tKU-KbQ{l;G(Q@Qeod|jz1+c{< zjdP{SZf8|VYYSAiW&KdFjBXk25YUq$iv(gmE|KP*bWg7K``zq{&5t}2J_Mf8`J6Of z60Iq!P&B?`y)6VRy1MvV1A9>KeMLM}`R_n&)9?3ioY7;Zp9{Uv^=HPHg_48NIh+b2 z93RozC7;iKAg+H>yBjR|?xW!{@xF!ee|zmEM5T5A)T-c9AE7dl`k=JQDaVJQ2?M2z3OkHy7VO-^8!U zuYCiX^{pi`6jk7n&cHvIM&|?tyNuma;t6EZ4fle* z&x6$%cx4n2W0v)LK!8_$RT6U-ZD6&BhS{~$X+f%!PN$jnU;^`KMu|3$EdC~T(r;xs z=Jk*=?^hU9yFyyV!35ILjA>Ub9yx4{B*cxr^2hNZ(zD91k?K8NdOgiiT|ti!QxuUc zN{Qt{4+`lr&mJ_{x`T&c>WozsT}?#?^>_YXti(&GfFx5)wXRz{Nc zgChQBJfVb~mB@pWv$eJ|x8TARku{`U5Pf}B-akj_gLk3fB&~~iXIxsO-H@APcxdzS zvgXpiiu!&PMOO2vYYIV#z{~A#h{$XWbP=&OlGQ_H?%bKPt6G)gZBy5ZiLrC@U&m4r znvJk%ZU8d7q!Tys3g-mYj?Elt#T(Yw(uh=(nmm{E+q9h;e|&orci)oI3td&x<6E!n z^IZ2NkaiH>UY{^){4VdPW4lAxXdUaNFnE+gWST&Hwi+#mw&+UuGNy?)L8z1*gk9f% zx^);`c`(kSI7&Lthc`!kAiS0?S%90Sy6X3K+zzzvtw}UmKMKu9_B@NYrBBRB*RcLN zI|@z|BXwV$djEmt|9&J!K$$&pfnmpgIL%BaX^`KJxjIHD12o85lyu5@IkRfj!*y!wl;$FY{aMM4`96Rjkk;B5cqmEfFS`QjM4B+Zxv z7@HCla8%=%!qxO5<}M`M;@f)dBt@B2ZMY=7rnO559%r8c+g zkL>of$BbE5Elmh&dJq?TvlVKOj)<6nsG`KGZh`vL+AL<2bE|Faft}JA()i;5rw9Vq z+$`38Xa|Q$!2@wUJoCAC+?BrBf%UBSb$MBnY#h;uDyZY_`7UbdL7Z+B6|OnJE@?1d zJ-Bzwu2Yvo&&Ni6BBzCsvE+S)Z?!1(blDti23EYrNe!`w2z%rz+uWP59|G zIW8y_VwI7?Ip4CteLv=LOFd=+-cvdeTVDgaU~7Yk_-x)QvirDCU5Kejmxs^Lc`sijvJqa8;)9jn^OsE-6ft^Ho@>(b~OlW++ zPcf?bGS%<>IXR{mn1dZ<+Xs77(h991d_#n*_r<4%ax@oiqJ*GZkw zGD{B9Xy^`N=_#LIsF!^9#VqqpU5&p0wVs^b+nW>%={`np(Kf4z4%*%cY(;>xQXI@@ z!!(kDEZiw7d?hK^w}?JKO>yZo+RAM(@94f-Ze{9)GVCY;R~e?XG_I58XTzwXKbkdM z?N@ELvLT`krM0EkkW;j8Lj_jC@XfToIsI+8EzSBC6_z+oC#%~IL8PlA__vhH^+y3t z$7URd3%!(G?N5di60MBBbr8%+_EUD&Pv^-^|9H22WkP>4^<1A2=Q4FRPU$AhU}FaQ zl!YXds0h@pWmTEN568cPu1{(lC%Kwth^Z$73$5u^j1?@E#oE1h`E+YrCct?Sl)@Yf z>S-oTFFjI60b7d+QgoecGn82xi-s%0achN7ulVypChio>R93d-WVGEJI_{rj>*ll~ z?HW|Z&dleL22d`=4D8GzPpgr3+`q5t`5cXuO9Ej_j~ARjQg<`HX)jseZ%Y#f{rcn# zgSNsu9J%n7)al%5HmVfcW$aqCklnYn{Bp zgsp}pbe8qy2|3Pp&fA|{XPG(vsK?5JpUviH?8>kc@IQt}uS%!x(JCn^sGJsC=Lg&c zey#<4?Abvvr!}n0TusUnOn>Mqzx}BlkJMS4S?JktUSVF_ehG+Hy#w7%ho7Q z!!>ad!>iA2lR}0L))S{_5iD!BJo>S0mlO1wjEZn&NWv0 z_8Bqm&TjxOz91OF6M-+vY&q&+n!GgK>cK4{+VDbq|IE$irI#26H4`=}SGsW0=*I9i!13MFc3xEPi z>2RtwW{qTfn!2KP?l`GKyJQcSlRjByQ_Rwnjm`b1p}LYoql@G5_>1qFNJojTI_d1BsF@vxs?J??+s+z-C4x z5K0T%o-{q0_Qvv_69Dz-PXmk=gL-)1!0$AYUYunsHPwULHACA|TpLf+_ocZv)?=AACp;EuEGX~ld{b3=C`rTbzT%%5pr zY!i{!Y1r*`dzEoQ>-+sJ+3iv;Gs3gtH3Sp$xOvL>%K>ORTHAx$r?lGXvvJWhjIYw{ zVAWRifhp5lDJv|GY#^i9WZBIq)6TH~R6_pfmrrU}sU@cAK!0~IFJ(Q!*vgH5fK~93 zn$Z4VoBLRpyouipa*=}q(p&~1sT}7zi5GWMnY7{A88hIQpJMrZi;mFvIv3&+vk$Ij zcqy*ew{a{O6X0a9_i1V^8rWSuS6M2e8?P0}i%DaLv;g#KMbBfl*V5J!lSmsMtfFfo z?s4DESx*o_EF+0Z9TCGOk$r%#Fc8o(%KxavX_g@@@LtM#D+R}G{)lorrRuv zq#4P~{Y)U(S$-K;eUW{Hj`@fYHf!u^N9w-pWO%|NnUl{0zjAKz4Yy*6eWW^C?}y2(3?A%r~;b6WpM#jZ^#I_V`zZhc?= ztuZYAM!xUBJ%H(6AtH=A}Ho^C_q2HPd+Nb$9dn^8U_oRQ(Prnlaz8T+-7 zmY0b}2NjjF<9fCN<%?Ya zgPByN@uc64;~QbnL}T`DRcUf}W{v0n3^U{43`*AG>bcSqd~3`=wi!+iO+uItZq%94 z>))$-$GM7u`4wMcDbHso4~Hqhh@<1~Xz%oC%8n7zg^WM__L7ywkIb^p%={wh2#SC9!G7lu(+* z{P9;bVI%sTX{NV~8K=jeF?izhbv0f)2Dzlv8<=mu%MK(M+3h!4kmT}R$%LAF=6k-h zVriuDw=&JE-%gqjoL)2Lge5SK0~u-B1eO}x((y$psNYVv?$%911$F7Ch(WO~Qxzx( zb^$1I-iFz`X1`;Csd=$K`sfTKtmZ98>vg{I>phr56tPRbPUPP@vZoIRH*^3frK~LCc$V?sYCnXiAOQg90qFxmBPV?CC znMCvVrFLvRxLm?5w;~}ykh8>lB&;R1w}_{>s*rEBO*WT@XL_k(a4JB;&DWt|0?(L+ z@^eq;0n_`cQ$6tidiPs;*??&2Y&--xts{%Qne*?4{VZGSJz9M2Kn048?KXl-x!(uP zY(}GLB){Wfm>&ICYQQ2{58r*ckJeWbm$D&PU+4!^plM z*&7RV(6kqUh#WHAMwYD?gUY#__97hjRuOhOvOjBbU>i=ZH0_Ty_+0-!fk{6>+E8LY z8nq&eoa7dK3#?dE(FehvwXkl|2yXFxqIeb_hRh-ES)LYvW5Oz*bq0$OJ^VuOKQF#g z73K@@Zt}f@tnKW*Xggax?w+?jjpp@!IDFwVjz*#XQOGxKLr|e3>ON z-4aCL05~ZKdZ3^6nYGjLbzk{Bzo%_38+;gMjNz5BAjG9{5-vORJvc?!E$eDzTAe}* zd5C2DBOb5yErUFJ@^jwa9(3L+xH%I>VuGrTS+*x^k|!qI^7Clk%8Zu8-moCD{fX~` zZ(9FlhK#3PQy_LWYhirj#An~0pqfkQWNxDXAD~helzq{1fkZ2~!#_fkX+{vlV20CN zRsMYridhcIoUiW*O^YxF9@GB9Sxq z0)tgXeyW#@wR_#@23y=iJXVg^vJa{s91T=9uUjAO6KGzxYr(E129h)Y zBd{M=OsoRzDCY1Kdq#J9a{`lKof zgAuv@k5yRCRaCxKmoI49{O|jU&aqLG+CQ>1YL&Y10VuSW$i6)uIP%UH`K@WKw@`)Z zE!T6wcJ{E2TXgzXQ1+cZ+*LF0M|H-4a#y8wXE^f-tv2S2{`dCitN_+x$jq#^Z%OgA zSL}v;U8awPfs5dd+ZMb11(F#ejb3$@{LU;NLHi`nPM*j;fzO0n8?){pL{-Lawrxts zkLS#8Y`wp`=k83CWG(~V%Yn2QT{}U6XVClDN?0)4{6tNj4wfbBVdyb-F$f@Q?xszU z{F>jtD)<3Na#HpaNu^zGFLJv6D{qU;GB(U`iL|FwX(dn_Gf;$D&7CtAe-eEyIu1&N zyzPR<<4=^Q^Jkl1#%BC@1T9Se?f2+YP#x&#AIUJ&NcVBmYU-ScyzGK-lUgy_2oJRN z7a=zM^mU zwC}ZO{8!T2)&ApybKv>zbnX^6}Zzmc_-@ z%ht?=+0)K;OkK`ll?S68{}3Se)VRSMt$+VjoJ2AL=BUB4O{lU?Y#DqZN`9njU;Wn3 z9%sU^n%gRee%enZ**nPX5G-oJ!bd$U&?rxkIs5Q2H}H65PQ=0GX|V;>Jb`D@bv%EX zzX(7$I~?79tQ~s{*lpyS5P(KJb#A%t&o9?x9ABdt^Mi70};+-N5Jw!ZW(jWQ!bQf>9@`83n7lKyi- zka$L?lUFiqVwi{<qFBilDY> z)bx7n$Vq*ODU4Erp;OVgq~10y2b#Y4zF@2mO*htT)zBx(C~8t=gppgkaU3%KiWD3o zhN*HR>7iaj`Kc+3=ffg6%a{QSFJc6Q^uPpKbtEh((OBUp{>GL-c+kXR2wwD}q7?uu zdwx&0t}}|}6c^1E`1(V;E9kna)2JyS%;2ampUGhzUdT!t}*N@Zjr)Os#G zZ((bJ_2v9+amJ;%WXL5$zi@)7mk9v|LE%tM(e`M+cP;w_*kWvPe_|Djej+Vs%D?sD zQRHaH)D4@n-7Z+I=cik@UlHj9QQ_#%sbS6zSa*S)5R?NhF~VbVcM;0XZPuaT>O z09-9BdJaTzBanOxGfeq7R5vKNzEP+02(^>OZOiidbi-D3@JOT|(Jn2of8N)ADIg|4 zc}>)IcZm}Kn`%#d^NC=1Jv`%Ehki#&WyL5}iukA&YxAxZt3q-qd8RItMyWF?_4NFg zyv1GG^|-&60Ysz@T>tzE57(Q4pP8jl?wwPt2#G)u<}t{a}%$A|24etD;ungGSyM=X;dsh zdW2XDRbt=sO)Dj}4qi;csV$3~-1-;N;hnW}*PF|NPm&6{L^->c4gkY(g)dfCePlvqR-&F z5Lc#W(E?-fuHh`0OfR4q)kw;1@)nT^$<9@!_IlbQk$o{Tfl*`Q{>UDu)X>1bx&DII zafn|xu*9x-&ZJPl;@z=pSvORDnM!S(7htSSR9Z6mflEuL8pu8PH> zNZm(R6L!%D`D^JQQUN{Y#Geh@GxBQnRNx5z=Z096!_bx=?1aEs5SuMp$j>?F;Wfs7 zM3k02>PaS+iBz-vGo}M@sqx<0RFxV0#qH@)7&Y1%w6+thtTY3LYyVxneL1WLTL4sS zv&s3}TF4Jx_!;d0Gp}{%pZVU*r8>JA98(SiY_1lX9>nRZ!g=UD zx;N#y7fbTrYm9^=#Im=+%fX?qGpXYY|77C(Ozw#TAB+m9Ct-a0jevr<8I@rZO8aWo zGbj7BJG3^E^EjE3LFlQD*n?88R^?{6WTh2Xda2?koW>%PPlZs1j?Kn% z&SXZyiC3<~fx~MH$j-9{5J)J7gYVE1FU46; zS0Ikt(}k<==Dez)=+`eVDw=5&ZC`VT5B#8mbrT2faZhC|Ez`-LkV)inabto0Y=e57 z;cO30cuSBc#czuCU?Rj4h7r*y^fmszqu0z(3a`X16s+=&Lz275$sXnwXmW4qUqUIp zYWKx8TC7sWLN-Xl{*%e+IdX22Vm&&84fOaXl`}Y5Gd@XQ){7;XO~mkL!d1tSpl8Ng z!TP{82pER?0j1hwdOsG*Z-ay=sAS3O5)^2%FCckGmD5ulpq| z!vd5M;ND2?Rijnm>Nw)G9f1ZO%zn?dat27LrqZ<`)icA&9S7<1V?z`BMuGYnGeHBm zlwu!$*%!+6gbO$;Mm+MBai@xjs~P%t$Vb@(Oq2ARZ+`MD$=HlkI=}k0Xzf`Dw%;lr z&w%bTdW2D}?a>QXd$B$*l;v=?G`q0mPW0PAZ5F*#m|tHMRWs%<_GfZC(%!%^Dg>x= z(Ho7KQ_DF!f1Y#%uCUg_PfC9=XSO_u2C*}FIO>{QJ-cT>-^`JT4i(`NN6q}rHx2~< z2=oLy)eGSN^xu5_C}rYA71lw%Fkg&Lnf(5D&kFXtcs};ujRAE1x1^!!TP;vDL@-I; zBfpQkmy{^=LY-lV3w-xL*z8856lDUwXTmH^O+mYUvZk90>P>`Ew-Hq>m*Fl@X=rZl z$ok<)$WYo9=~=%+5&Yn*?50~(eE#;Xjn};t$5pMa6q7s|Pj2KuYv^-Pz5lLgSMydB z81DOha}t<~-izPn*KXt3@ha5hC$&Z6eo?M?<$-7QcMZRCKNn{>DdtmS$ywF|N3ZU1 zglMbigUdm(dC9x-fpVpmx8VzQ1-Ez~iEvq}RWxD#>VVGxD(AH_n5j9@V8Q3M zkHk|h#w~aZ&ztsn*@eF{p^lY{pq~W!YrE3-vQohc`6BR;U1UED3gV{p;F2vGHKB$k z1&*%WxD##;VLm*hpAJPX8lTXCl`|97QJ0@)Hv5@l&rHUo$tdrdlrhs4PH{et3a*RR z|LIqhxD{|_`-LTg3v1a6($V7=e)r*;ZqA^JPu9byf#9`QmWzV17>V?_{E<%&VUH_; z>D{MCTB87t`Fm{R+D0dd#TnfQc>ddNd>kXf_3^+rs47z$8H&d;{|3iTfECS*9!z{h zL95h?aGtU$1uvISdmfn6I1vl79JI7;ExaUxEypp1SX0bjfow!_-#ajJ4E{9PZDR;cQOJ0pLNX#V1( zB43KNZDU_lp{C`MvN9VIu$c4OMOnhUero@PxaVt9IS)|vjmyK3Dmf)mC2&JZsBEYa>ey@Z7aCEB%&CtgaKHUDx zc%7kDcC%HX?swE{nnMzbsWJbq&i>g1g3{toy$#!VdtR_;qAoR9`V-vU*wy0aRZ>{m zYaeY4WItuEe-tyk^mv=sUO`D`!Qpl2{q?Yaoh{7kDL;EG;d}83?w7l!0j$NT$ns4t zE9eD9a7KpLbQYXT1-xU8@!YQ<`{lPD%l9MZP5v+ZzX?aYni58BfB-K%Qg%75`Ya3- zlym%m2q_RV%ZkxXc}ey$dvi021n4Vnh=}7!`gHoSj~O9)eQr&H$_b}+3i)!wX+?Qu zO@Q2fg6DdDES@^~~CcDP#*F8(q7Sh>T#=hWc?NM7`VgAmSC8uWm0aAh6R#vas zM(P#6Lh0j1ut{iGb8U~XZasP>z7VQz1jZ;jG`=e!|IC9+RJKyWc-LGqLk>+{g#kk1 zW$jmHrvG#m50~xwD)%MT!W1xjg$$$EL=_dOFBN%)?A0k>Yv@qV;$?+d&-B^-{;z+0+W^RJ%!-^) zNoJB$dW%;4_?4 zp{ijS)fi9iPsJn}LK96)*M+^g6@~o0TtG8@M_KnKly=}@%n45($!dl`0{o7jQI8N(4i^#0?V>O|yCt|O%0zeWcKiwXK76g8I_n#B_ zqvDj%@Ts_Yy>hkJ5;V|&flMzePX7jcr|7UxI*ki}Xov90$C+GH$v0wnP2Fzxr>Xn% zUE!%ZA3?|7y35sQb28PasM@TFCE{!k0jos%%4d^jbPEItO4JCIBNM127N(+1aLh!92%^HWjfdw?=oc`au9CDZq| zzopkXs1}91Q7eBKKtUfLj+CR%GubAbI_P*IS!VgqZHM><6|~wPUuE9?U$=qg73AT@ zk)fdCpO8Pqhbdza{lAwXAo~XY{l(iVio?h-$JZ)S)BOLt3;(S(!uj95hIk<*T;l(; zTB3u3!ufAK$P+Uto<&IrrcpTFNl6-JS0w(20CxP85+973SUi~!^*?{&8H6!V|EuI6 z{+~Ls!UPcECm45$cp(w`_;qCr;{U^p@c+LRXvuhF6(N{+(($q?48;F|7Bm!;HH1Ym z|JyL+iC!i?UPS<-Tn-A#)WJm2*}>6;#mLbyURVhy{zl~kjE!PEhAQ>DaFu^r{|kWf Btu_Dv delta 12547 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 delta 4319 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 c7`d- + // 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. + * @param {number} interval - The time in milliseconds to wait before the next increment on the cell. + * @param {CustomFunctions.StreamingInvocation} invocation - Parameter to send results to Excel + * or respond to the user canceling the function. + * @returns An incrementing value. + */ + function increment(amount: number, interval: number, invocation: + CustomFunctions.StreamingInvocation): void { + let result = 0; + const timer = setInterval(() => { + result += amount; + invocation.setResult(result); + }, interval); + + invocation.onCanceled = () => { + clearInterval(timer); + } + } 'Excel.AggregationFunction:enum': - >- // Link to full sample: From f3cbaa547ffc513b7942d7222206d5d25b148442 Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Fri, 12 Aug 2022 14:35:30 -0700 Subject: [PATCH 107/336] Change StreamingInvocation.setResult to a property mapping (#689) --- snippet-extractor-metadata/excel.xlsx | Bin 28166 -> 28158 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 8f455667d6928cf855cea6a4c9d2d3e5870dfb8e..7f77e2db9d41c5f5013b7402b996433ded32195c 100644 GIT binary patch delta 11174 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 // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/streaming-function.yaml From 7f5542dc7aa93680569d87d22c13871379cc234e Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 22 Aug 2022 14:14:51 -0700 Subject: [PATCH 108/336] [Outlook] (enums) Map Script Lab snippets to Mailbox enums (#691) * Add snippets to Mailbox enums * Apply review suggestion Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Apply suggestions from code review * Modify code comment Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/outlook.yaml | 18 + playlists/outlook.yaml | 18 + .../get-all-attendees.yaml | 131 +++++ .../40-attachments/attachments-compose.yaml | 18 +- ...-set-recurrence-appointment-organizer.yaml | 27 +- .../get-diagnostic-information.yaml | 72 +++ .../90-other-item-apis/get-item-type.yaml | 10 +- snippet-extractor-metadata/outlook.xlsx | Bin 22659 -> 22965 bytes snippet-extractor-output/snippets.yaml | 460 ++++++++++++++---- view-prod/outlook.json | 2 + view/outlook.json | 2 + 11 files changed, 657 insertions(+), 101 deletions(-) create mode 100644 samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml create mode 100644 samples/outlook/90-other-item-apis/get-diagnostic-information.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index e410f7a52..509f2615a 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -194,6 +194,15 @@ group: Recipients And Attendees api_set: Mailbox: '1.7' +- id: outlook-recipients-and-attendees-get-all-attendees + name: Get all attendees + fileName: get-all-attendees.yaml + description: Gets all appointment attendees and organizes them by their response. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.7' - id: outlook-notifications-add-getall-remove name: Work with notification messages fileName: add-getall-remove.yaml @@ -645,6 +654,15 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-other-item-apis-get-diagnostic-information + name: Get mailbox diagnostic information + fileName: get-diagnostic-information.yaml + description: Gets a mailbox's diagnostic information. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - 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 3f30ff02e..a4d04bd44 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -194,6 +194,15 @@ group: Recipients And Attendees api_set: Mailbox: '1.7' +- id: outlook-recipients-and-attendees-get-all-attendees + name: Get all attendees + fileName: get-all-attendees.yaml + description: Gets all appointment attendees and organizes them by their response. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml + group: Recipients And Attendees + api_set: + Mailbox: '1.7' - id: outlook-notifications-add-getall-remove name: Work with notification messages fileName: add-getall-remove.yaml @@ -645,6 +654,15 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-other-item-apis-get-diagnostic-information + name: Get mailbox diagnostic information + fileName: get-diagnostic-information.yaml + description: Gets a mailbox's diagnostic information. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml diff --git a/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml new file mode 100644 index 000000000..9a0206f82 --- /dev/null +++ b/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml @@ -0,0 +1,131 @@ +order: 15 +id: outlook-recipients-and-attendees-get-all-attendees +name: Get all attendees +description: Gets all appointment attendees and organizes them by their response. +host: OUTLOOK +api_set: + Mailbox: '1.7' +script: + content: |- + $("#get-attendees").click(getAttendees); + + function getAttendees() { + // This snippet gets an appointment's required and optional attendees and groups them by their response. + const appointment = Office.context.mailbox.item; + let attendees; + if (Object.keys(appointment.organizer).length === 0) { + // Get attendees as the meeting organizer. + appointment.requiredAttendees.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.log(result.error.message); + return; + } + + attendees = result.value; + appointment.optionalAttendees.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.log(result.error.message); + return; + } + + attendees = attendees.concat(result.value); + + // Organize attendees by their meeting response and print this to the console. + organizeByResponse(attendees); + }); + }); + } else { + // Get attendees as a meeting attendee. + attendees = appointment.requiredAttendees; + attendees = attendees.concat(appointment.optionalAttendees); + + // Organize attendees by their meeting response and print this to the console. + organizeByResponse(attendees); + } + } + + function organizeByResponse(attendees) { + const accepted = []; + const declined = []; + const noResponse = []; + const tentative = []; + attendees.forEach(attendee => { + switch (attendee.appointmentResponse) { + case Office.MailboxEnums.ResponseType.Accepted: + accepted.push(attendee); + break; + case Office.MailboxEnums.ResponseType.Declined: + declined.push(attendee); + break; + case Office.MailboxEnums.ResponseType.None: + noResponse.push(attendee); + break; + case Office.MailboxEnums.ResponseType.Tentative: + tentative.push(attendee); + break; + case Office.MailboxEnums.ResponseType.Organizer: + console.log(`Organizer: ${attendee.displayName}, ${attendee.emailAddress}`); + break; + } + }); + + // List attendees by their response. + console.log("Accepted: "); + printAttendees(accepted); + console.log("Declined: "); + printAttendees(declined); + console.log("Tentative: "); + printAttendees(tentative); + console.log("No response: "); + printAttendees(noResponse); + } + + function printAttendees(attendees) { + if (attendees.length === 0) { + console.log("None"); + } else { + attendees.forEach(attendee => { + console.log(` ${attendee.displayName}, ${attendee.emailAddress}`); + }); + } + } + language: typescript +template: + content: |- +
+

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

+

Required mode: Appointment Organizer, Appointment 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 \ No newline at end of file diff --git a/samples/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index 3fb3ea1f4..1d0765464 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -46,8 +46,22 @@ script: } else { if (result.value.length > 0) { for (let i = 0; i < result.value.length; i++) { - let attachment = result.value[i]; - console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); + 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 { 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 46bde09e2..755682401 100644 --- a/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml +++ b/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml @@ -29,28 +29,25 @@ script: // Important: Can only set the recurrence pattern of an appointment series. const currentDate = new Date(); - let seriesTimeObject : Office.SeriesTime; + let seriesTimeObject: Office.SeriesTime; // Set series start date to tomorrow. - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); - // Set series end date to 1 month from now. - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); + seriesTimeObject.setStartDate(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDay() + 1); + // Set series end date to one year from now. + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, currentDate.getMonth() + 1, currentDate.getDay()); // Set start time to 1:30 PM. seriesTimeObject.setStartTime(13, 30); // Set duration to 30 minutes. seriesTimeObject.setDuration(30); - let pattern : Office.Recurrence = { + const pattern: Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, - recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; diff --git a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml new file mode 100644 index 000000000..3a2057ba2 --- /dev/null +++ b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -0,0 +1,72 @@ +order: 17 +id: outlook-other-item-apis-get-diagnostic-information +name: Get mailbox diagnostic information +description: Gets a mailbox's diagnostic information. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: |- + $("#get-diagnostics").click(getDiagnostics); + + function getDiagnostics() { + // This snippet gets a mailbox's diagnostic information, such as host application and version, and prints it to the console. + const diagnostics = Office.context.mailbox.diagnostics; + console.log(`Host application: ${diagnostics.hostName}`); + console.log(`Host version: ${diagnostics.hostVersion}`); + + switch (diagnostics.OWAView) { + case undefined: + console.log("Current view (Outlook on the web only): Not applicable. Host application is an Outlook desktop client."); + break; + case Office.MailboxEnums.OWAView.OneColumn: + console.log("Current view (Outlook on the web only): Viewed from a mobile phone"); + break; + case Office.MailboxEnums.OWAView.TwoColumns: + console.log("Current view (Outlook on the web only): Viewed from a tablet"); + break; + case Office.MailboxEnums.OWAView.ThreeColumns: + console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); + break; + } + } + language: typescript +template: + content: |- +
+

This sample shows how to get a mailbox's diagnostic information.

+

Required mode: Compose, 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 \ No newline at end of file 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 8e5d6ce28..996d2c2d0 100644 --- a/samples/outlook/90-other-item-apis/get-item-type.yaml +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -10,7 +10,15 @@ script: $("#get").click(get); function get() { - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); + 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; + } } language: typescript template: diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 764dadc9ccef45eea4640072c06df8fdaa6d7793..5e9516665469b47637ec75c93f1f93daaf007d62 100644 GIT binary patch delta 13947 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 delta 13662 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 0) { for (let i = 0; i < result.value.length; i++) { - let attachment = result.value[i]; - console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); + 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 { @@ -8252,23 +8266,17 @@ const currentDate = new Date(); - let seriesTimeObject : Office.SeriesTime; + let seriesTimeObject: Office.SeriesTime; // Set series start date to tomorrow. - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); - // Set series end date to 1 month from now. + // Set series end date to one year from now. - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); // Set start time to 1:30 PM. @@ -8279,10 +8287,15 @@ seriesTimeObject.setDuration(30); - let pattern : Office.Recurrence = { + const pattern: Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, - recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; @@ -8441,7 +8454,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); + 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.AppointmentCompose#start:member': - >- // Link to full sample: @@ -9254,7 +9276,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); + 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.AppointmentRead#start:member': - >- // Link to full sample: @@ -10138,6 +10169,40 @@ // Handle attachment formats that are not supported. } } +'Office.MailboxEnums.AttachmentType:enum': + - >- + // 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); + } 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.MailboxEnums.CategoryColor:enum': - >- // Link to full sample: @@ -10188,23 +10253,17 @@ const currentDate = new Date(); - let seriesTimeObject : Office.SeriesTime; + let seriesTimeObject: Office.SeriesTime; // Set series start date to tomorrow. - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); - // Set series end date to 1 month from now. + // Set series end date to one year from now. - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); // Set start time to 1:30 PM. @@ -10215,10 +10274,15 @@ seriesTimeObject.setDuration(30); - let pattern : Office.Recurrence = { + const pattern: Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, - recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; @@ -10296,6 +10360,21 @@ }; Office.context.mailbox.item.notificationMessages.addAsync(id, details, handleResult); +'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 + + 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.MailboxEnums.LocationType:enum': - >- // Link to full sample: @@ -10320,6 +10399,86 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); +'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 + + // Important: Can only set the recurrence pattern of an appointment series. + + + const currentDate = new Date(); + + let seriesTimeObject: Office.SeriesTime; + + // Set series start date to tomorrow. + + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); + + // Set series end date to one year from now. + + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. + + seriesTimeObject.setDuration(30); + + + const pattern: Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; + } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); + }); +'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 + + // This snippet gets a mailbox's diagnostic information, such as host + application and version, and prints it to the console. + + const diagnostics = Office.context.mailbox.diagnostics; + + console.log(`Host application: ${diagnostics.hostName}`); + + console.log(`Host version: ${diagnostics.hostVersion}`); + + + switch (diagnostics.OWAView) { + case undefined: + console.log("Current view (Outlook on the web only): Not applicable. Host application is an Outlook desktop client."); + break; + case Office.MailboxEnums.OWAView.OneColumn: + console.log("Current view (Outlook on the web only): Viewed from a mobile phone"); + break; + case Office.MailboxEnums.OWAView.TwoColumns: + console.log("Current view (Outlook on the web only): Viewed from a tablet"); + break; + case Office.MailboxEnums.OWAView.ThreeColumns: + console.log("Current view (Outlook on the web only): Viewed from a desktop computer"); + break; + } 'Office.MailboxEnums.RecipientType:enum': - >- // Link to full sample: @@ -10384,23 +10543,17 @@ const currentDate = new Date(); - let seriesTimeObject : Office.SeriesTime; + let seriesTimeObject: Office.SeriesTime; // Set series start date to tomorrow. - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); - // Set series end date to 1 month from now. + // Set series end date to one year from now. - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); // Set start time to 1:30 PM. @@ -10411,10 +10564,15 @@ seriesTimeObject.setDuration(30); - let pattern : Office.Recurrence = { + const pattern: Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, - recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; @@ -10436,23 +10594,17 @@ const currentDate = new Date(); - let seriesTimeObject : Office.SeriesTime; + let seriesTimeObject: Office.SeriesTime; // Set series start date to tomorrow. - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); - // Set series end date to 1 month from now. + // Set series end date to one year from now. - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); // Set start time to 1:30 PM. @@ -10463,10 +10615,15 @@ seriesTimeObject.setDuration(30); - let pattern : Office.Recurrence = { + const pattern: Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, - recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; @@ -10478,6 +10635,46 @@ } console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); +'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 + + function organizeByResponse(attendees) { + const accepted = []; + const declined = []; + const noResponse = []; + const tentative = []; + attendees.forEach(attendee => { + switch (attendee.appointmentResponse) { + case Office.MailboxEnums.ResponseType.Accepted: + accepted.push(attendee); + break; + case Office.MailboxEnums.ResponseType.Declined: + declined.push(attendee); + break; + case Office.MailboxEnums.ResponseType.None: + noResponse.push(attendee); + break; + case Office.MailboxEnums.ResponseType.Tentative: + tentative.push(attendee); + break; + case Office.MailboxEnums.ResponseType.Organizer: + console.log(`Organizer: ${attendee.displayName}, ${attendee.emailAddress}`); + break; + } + }); + + // List attendees by their response. + console.log("Accepted: "); + printAttendees(accepted); + console.log("Declined: "); + printAttendees(declined); + console.log("Tentative: "); + printAttendees(tentative); + console.log("No response: "); + printAttendees(noResponse); + } 'Office.MailboxEnums.RestVersion:enum': - >- // Link to full sample: @@ -10498,6 +10695,72 @@ } xhr.send(); }); +'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 + + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const text = asyncResult.value.data; + const prop = asyncResult.value.sourceProperty; + console.log("Selected text in " + prop + ": " + text); + } else { + console.error(asyncResult.error); + } + }); +'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 + + // Important: Can only set the recurrence pattern of an appointment series. + + + const currentDate = new Date(); + + let seriesTimeObject: Office.SeriesTime; + + // Set series start date to tomorrow. + + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); + + // Set series end date to one year from now. + + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. + + seriesTimeObject.setDuration(30); + + + const pattern: Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; + } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); + }); 'Office.MasterCategories#getAsync:member(2)': - >- // Link to full sample: @@ -10866,8 +11129,22 @@ } else { if (result.value.length > 0) { for (let i = 0; i < result.value.length; i++) { - let attachment = result.value[i]; - console.log(`${attachment.id}. Name: ${attachment.name}, size: ${attachment.size}, isInline: ${attachment.isInline}`); + 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 { @@ -11173,7 +11450,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); + 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.MessageCompose#conversationId:member': - >- // Link to full sample: @@ -11852,7 +12138,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml - console.log(`Item type: ${Office.context.mailbox.item.itemType}`); + 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.MessageRead#start:member': - >- // Link to full sample: @@ -12226,23 +12521,17 @@ const currentDate = new Date(); - let seriesTimeObject : Office.SeriesTime; + let seriesTimeObject: Office.SeriesTime; // Set series start date to tomorrow. - seriesTimeObject.setStartDate( - currentDate.getFullYear(), - currentDate.getMonth(), - currentDate.getDay() + 1 - ); + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); - // Set series end date to 1 month from now. + // Set series end date to one year from now. - seriesTimeObject.setEndDate( - currentDate.getFullYear(), - currentDate.getMonth() + 1, - currentDate.getDay() - ); + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); // Set start time to 1:30 PM. @@ -12253,10 +12542,15 @@ seriesTimeObject.setDuration(30); - let pattern : Office.Recurrence = { + const pattern: Office.Recurrence = { seriesTime: seriesTimeObject, - recurrenceType: Office.MailboxEnums.RecurrenceType.Weekly, - recurrenceProperties: { interval: 1, days: [Office.MailboxEnums.Days.Tue, Office.MailboxEnums.Days.Thu], firstDayOfWeek: Office.MailboxEnums.Days.Sun }, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } }; diff --git a/view-prod/outlook.json b/view-prod/outlook.json index d5ee7df29..91822cf32 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -20,6 +20,7 @@ "outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-all-attendees": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml", "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml", "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml", @@ -68,5 +69,6 @@ "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", + "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 4098623f7..3e4266933 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -20,6 +20,7 @@ "outlook-recipients-and-attendees-get-set-optional-attendees-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-attendee": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-attendee.yaml", "outlook-recipients-and-attendees-get-organizer-appointment-organizer": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml", + "outlook-recipients-and-attendees-get-all-attendees": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/30-recipients-and-attendees/get-all-attendees.yaml", "outlook-notifications-add-getall-remove": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/35-notifications/add-getall-remove.yaml", "outlook-attachments-attachments-compose": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/attachments-compose.yaml", "outlook-attachments-get-attachment-content": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/get-attachment-content.yaml", @@ -68,5 +69,6 @@ "outlook-other-item-apis-get-conversation-id-message": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml", "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", + "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" } \ No newline at end of file From 4cb35f90921c734de971fbae0b9a2f670ce9fe79 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 30 Aug 2022 10:02:38 -0700 Subject: [PATCH 109/336] [Outlook] (Office.Body) Create snippets (#694) --- playlists-prod/outlook.yaml | 48 ++++- playlists/outlook.yaml | 48 ++++- .../20-item-body/append-text-on-send.yaml | 78 ++++++++ .../outlook/20-item-body/get-body-format.yaml | 62 ++++++ .../prepend-text-to-item-body.yaml | 81 ++++++++ .../20-item-body/replace-selected-text.yaml | 85 ++++++++ ...d-remove-enhancedlocation-appointment.yaml | 2 +- .../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 | 2 +- ...et-set-location-appointment-organizer.yaml | 2 +- .../get-set-start-appointment-organizer.yaml | 2 +- .../90-other-item-apis/get-start-read.yaml | 2 +- .../set-selected-data.yaml | 4 +- snippet-extractor-metadata/outlook.xlsx | Bin 22965 -> 23307 bytes snippet-extractor-output/snippets.yaml | 188 +++++++++++++++++- view-prod/outlook.json | 6 +- view/outlook.json | 6 +- 26 files changed, 605 insertions(+), 31 deletions(-) create mode 100644 samples/outlook/20-item-body/append-text-on-send.yaml create mode 100644 samples/outlook/20-item-body/get-body-format.yaml create mode 100644 samples/outlook/20-item-body/prepend-text-to-item-body.yaml create mode 100644 samples/outlook/20-item-body/replace-selected-text.yaml rename samples/outlook/{20-item-body => 90-other-item-apis}/set-selected-data.yaml (96%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 509f2615a..2d878022e 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -28,12 +28,14 @@ group: Item Body api_set: Mailbox: '1.1' -- id: outlook-item-body-set-selected-data - name: Set selected text (Compose) - fileName: set-selected-data.yaml - description: Replaces the selected text in the item body or subject in Compose mode. +- id: outlook-item-body-replace-selected-text + name: Replace selected text in item body + fileName: replace-selected-text.yaml + description: >- + Replaces selected text in a message or appointment's body with specified + text. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/replace-selected-text.yaml group: Item Body api_set: Mailbox: '1.1' @@ -48,6 +50,33 @@ group: Item Body api_set: Mailbox: '1.8' +- id: outlook-item-body-get-body-format + name: Get the item's body format + fileName: get-body-format.yaml + description: Gets a message or appointment's body format (plain text or HTML). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-body-format.yaml + group: Item Body + api_set: + Mailbox: '1.1' +- id: outlook-item-body-append-text-on-send + name: Append text to item body on send + fileName: append-text-on-send.yaml + description: Appends text to the end of the message or appointment's body once it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/append-text-on-send.yaml + group: Item Body + api_set: + Mailbox: '1.9' +- id: outlook-item-body-prepend-text-to-item-body + name: Prepend text to item body + fileName: prepend-text-to-item-body.yaml + description: Adds text to the beginning of the message or appointment's body. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-to-item-body.yaml + group: Item Body + api_set: + Mailbox: '1.1' - id: outlook-item-save-and-close-close name: Close the item fileName: close.yaml @@ -528,6 +557,15 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-item-body-set-selected-data + name: Replace selected text in item body or subject (Compose) + fileName: set-selected-data.yaml + description: Replaces the selected text in the item body or subject in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-other-item-apis-get-internet-message-id-read name: Get the internet message ID (Message Read) fileName: get-internet-message-id-read.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index a4d04bd44..97df3d6f4 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -28,12 +28,14 @@ group: Item Body api_set: Mailbox: '1.1' -- id: outlook-item-body-set-selected-data - name: Set selected text (Compose) - fileName: set-selected-data.yaml - description: Replaces the selected text in the item body or subject in Compose mode. +- id: outlook-item-body-replace-selected-text + name: Replace selected text in item body + fileName: replace-selected-text.yaml + description: >- + Replaces selected text in a message or appointment's body with specified + text. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/replace-selected-text.yaml group: Item Body api_set: Mailbox: '1.1' @@ -48,6 +50,33 @@ group: Item Body api_set: Mailbox: '1.8' +- id: outlook-item-body-get-body-format + name: Get the item's body format + fileName: get-body-format.yaml + description: Gets a message or appointment's body format (plain text or HTML). + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/get-body-format.yaml + group: Item Body + api_set: + Mailbox: '1.1' +- id: outlook-item-body-append-text-on-send + name: Append text to item body on send + fileName: append-text-on-send.yaml + description: Appends text to the end of the message or appointment's body once it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/append-text-on-send.yaml + group: Item Body + api_set: + Mailbox: '1.9' +- id: outlook-item-body-prepend-text-to-item-body + name: Prepend text to item body + fileName: prepend-text-to-item-body.yaml + description: Adds text to the beginning of the message or appointment's body. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/prepend-text-to-item-body.yaml + group: Item Body + api_set: + Mailbox: '1.1' - id: outlook-item-save-and-close-close name: Close the item fileName: close.yaml @@ -528,6 +557,15 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-item-body-set-selected-data + name: Replace selected text in item body or subject (Compose) + fileName: set-selected-data.yaml + description: Replaces the selected text in the item body or subject in Compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/set-selected-data.yaml + group: Other Item APIs + api_set: + Mailbox: '1.1' - id: outlook-other-item-apis-get-internet-message-id-read name: Get the internet message ID (Message Read) fileName: get-internet-message-id-read.yaml diff --git a/samples/outlook/20-item-body/append-text-on-send.yaml b/samples/outlook/20-item-body/append-text-on-send.yaml new file mode 100644 index 000000000..14f056e71 --- /dev/null +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -0,0 +1,78 @@ +order: 5 +id: outlook-item-body-append-text-on-send +name: Append text to item body on send +description: Appends text to the end of the message or appointment's body once it's sent. +host: OUTLOOK +api_set: + Mailbox: '1.9' +script: + content: | + $("#append-on-send").click(appendOnSend); + + 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(); + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.appendOnSendAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log(`"${text}" will be appended to the body once the message or appointment is sent. Send the mail item to test this feature.`); + }); + }); + } + language: typescript +template: + content: |- +
+

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

+

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/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/20-item-body/get-body-format.yaml b/samples/outlook/20-item-body/get-body-format.yaml new file mode 100644 index 000000000..50621c9f0 --- /dev/null +++ b/samples/outlook/20-item-body/get-body-format.yaml @@ -0,0 +1,62 @@ +order: 4 +id: outlook-item-body-get-body-format +name: Get the item's body format +description: Gets a message or appointment's body format (plain text or HTML). +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#get-body-format").click(getBodyFormat); + + function getBodyFormat() { + // Get the mail item's body format (plain text or HTML) and log it to the console. + Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log("Body format: " + asyncResult.value); + }); + } + language: typescript +template: + content: |- +
+

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

+

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/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/20-item-body/prepend-text-to-item-body.yaml b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml new file mode 100644 index 000000000..e062d5c42 --- /dev/null +++ b/samples/outlook/20-item-body/prepend-text-to-item-body.yaml @@ -0,0 +1,81 @@ +order: 6 +id: outlook-item-body-prepend-text-to-item-body +name: Prepend text to item body +description: Adds text to the beginning of the message or appointment's body. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#prepend").click(prependText); + + 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!'. + */ + const text = $("#text-field").val(); + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.prependAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log(`"${text}" prepended to the body.`); + }); + }); + } + language: typescript +template: + content: |- +
+

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

+

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/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/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml new file mode 100644 index 000000000..cd0e62e6e --- /dev/null +++ b/samples/outlook/20-item-body/replace-selected-text.yaml @@ -0,0 +1,85 @@ +order: 2 +id: outlook-item-body-replace-selected-text +name: Replace selected text in item body +description: Replaces selected text in a message or appointment's body with specified text. +host: OUTLOOK +api_set: + Mailbox: '1.1' +script: + content: | + $("#replace-selection").click(replaceSelection); + + 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!'. + */ + const text = $("#text-field").val(); + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.setSelectedDataAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log(`Replaced selected text with "${text}".`); + }); + }); + } + language: typescript +template: + content: |- +
+

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

+

Required mode: Compose

+
+ +
+

Try it out

+
    +
  1. Select text in the item's body.
  2. +
    +
  3. Enter text to replace the selected text.
  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 + @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/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml b/samples/outlook/90-other-item-apis/get-add-remove-enhancedlocation-appointment.yaml index 2c2346afe..1a4b68f59 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,4 +1,4 @@ -order: 12 +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).' 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 23969360c..697608f8d 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 @@ -1,4 +1,4 @@ -order: 14 +order: 15 id: outlook-other-item-apis-get-conversation-id-message name: Get the conversation ID (Message) description: Gets the conversation ID of a message. 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 9b49d4624..f41ce02e7 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 @@ -1,4 +1,4 @@ -order: 15 +order: 16 id: outlook-other-item-apis-get-date-time-created-read name: Get the creation date and time (Read) description: Gets the creation date and time of an item in Read mode. 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 3be000758..8000abae0 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 @@ -1,4 +1,4 @@ -order: 16 +order: 17 id: outlook-other-item-apis-get-date-time-modified-read name: Get the last-modified date and time (Read) description: Gets the last-modified date and time of an item in Read mode. 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 3a2057ba2..5f6753438 100644 --- a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml +++ b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -1,4 +1,4 @@ -order: 17 +order: 18 id: outlook-other-item-apis-get-diagnostic-information name: Get mailbox diagnostic information description: Gets a mailbox's diagnostic information. 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 6064b48d8..55e37fb88 100644 --- a/samples/outlook/90-other-item-apis/get-end-read.yaml +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -1,4 +1,4 @@ -order: 8 +order: 9 id: outlook-other-item-apis-get-end-read name: Get the end date and time (Read) description: Gets the end date and time of an item in Read mode. 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 1bc713903..829fa5309 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 @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: outlook-other-item-apis-get-internet-message-id-read name: Get the internet message ID (Message Read) description: Gets the internet message ID of a message in Read mode. 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 5b4c6aed7..363e80cd3 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 @@ -1,4 +1,4 @@ -order: 4 +order: 5 id: outlook-other-item-apis-get-item-class-read name: Get the item class (Read) description: Gets the item class of an item in Read mode. 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 996d2c2d0..ab80afb9e 100644 --- a/samples/outlook/90-other-item-apis/get-item-type.yaml +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: outlook-other-item-apis-get-item-type name: Get the item type description: Gets the item type. 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 5aa48107f..5adaa4a73 100644 --- a/samples/outlook/90-other-item-apis/get-location-read.yaml +++ b/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -1,4 +1,4 @@ -order: 10 +order: 11 id: outlook-other-item-apis-get-location-read name: Get the location (Read) description: Gets the location of an item in Read mode. 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 de776f395..87414f2f9 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 @@ -1,4 +1,4 @@ -order: 13 +order: 14 id: outlook-other-item-apis-get-normalized-subject-read name: Get the normalized subject (Read) description: Gets the normalized subject of an item in Read mode. 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 7a659459e..dbb4d0e14 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 @@ -1,4 +1,4 @@ -order: 9 +order: 10 id: outlook-other-item-apis-get-set-end-appointment-organizer name: Get and set the end date and time (Appointment Organizer) description: Gets and sets the end date and time of an appointment in Compose mode. 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 c4b7f1ccc..45c1c43fd 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 @@ -1,4 +1,4 @@ -order: 11 +order: 12 id: outlook-other-item-apis-get-set-location-appointment-organizer name: Get and set the location (Appointment Organizer) description: Gets and sets the location of an appointment in Compose mode. 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 05851a207..cd5277f34 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 @@ -1,4 +1,4 @@ -order: 7 +order: 8 id: outlook-other-item-apis-get-set-start-appointment-organizer name: Get and set the start date and time (Appointment Organizer) description: Gets and sets the start date and time of an appointment in Compose mode. 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 04ee845e0..a7301233b 100644 --- a/samples/outlook/90-other-item-apis/get-start-read.yaml +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 id: outlook-other-item-apis-get-start-read name: Get the start date and time (Read) description: Gets the start date and time of an item in Read mode. diff --git a/samples/outlook/20-item-body/set-selected-data.yaml b/samples/outlook/90-other-item-apis/set-selected-data.yaml similarity index 96% rename from samples/outlook/20-item-body/set-selected-data.yaml rename to samples/outlook/90-other-item-apis/set-selected-data.yaml index 4d8777681..e98f0c23a 100644 --- a/samples/outlook/20-item-body/set-selected-data.yaml +++ b/samples/outlook/90-other-item-apis/set-selected-data.yaml @@ -1,6 +1,6 @@ -order: 2 +order: 3 id: outlook-item-body-set-selected-data -name: Set selected text (Compose) +name: Replace selected text in item body or subject (Compose) description: Replaces the selected text in the item body or subject in Compose mode. host: OUTLOOK api_set: diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 5e9516665469b47637ec75c93f1f93daaf007d62..b1df340a883bf10362bc69613bb7e738f475136a 100644 GIT binary patch delta 14160 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 delta 13821 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml + 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) { @@ -9348,6 +9348,190 @@ console.log("There are no locations."); } }); +'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. + + const text = $("#text-field").val(); + + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.appendOnSendAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + 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)': + - >- + // 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 = + "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAnUExURQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN0S+bUAAAAMdFJOUwAQIDBAUI+fr7/P7yEupu8AAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVGhD7dfLdoMwDEVR6Cspzf9/b20QYOthS5Zn0Z2kVdY6O2WULrFYLBaLxd5ur4mDZD14b8ogWS/dtxV+dmx9ysA2QUj9TQRWv5D7HyKwuIW9n0vc8tkpHP0W4BOg3wQ8wtlvA+PC1e8Ao8Ld7wFjQtHvAiNC2e8DdqHqKwCrUPc1gE1AfRVgEXBfB+gF0lcCWoH2tYBOYPpqQCNwfT3QF9i+AegJfN8CtAWhbwJagtS3AbIg9o2AJMh9M5C+SVGBvx6zAfmT0r+Bv8JMwP4kyFPir+cswF5KL3WLv14zAFBCLf56Tw9cparFX4upgaJUtPhrOS1QlY5W+vWTXrGgBFB/b72ev3/0igUdQPppP/nfowfKUUEFcP207y/yxKmgAYQ+PywoAFOfCH3A2MdCFzD3kdADBvq10AGG+pXQBgb7pdAEhvuF0AIc/VtoAK7+JciAs38KIuDugyAC/v4hiMCE/i7IwLRBsh68N2WQjMVisVgs9i5bln8LGScNcCrONQAAAABJRU5ErkJggg=="; + + // 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 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 image added to the body."); + } else { + console.log(setResult.error.message); + } + }); + } else { + console.log(attachResult.error.message); + } + }); + } else { + console.log(bodyResult.error.message); + } + }); +'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 + + // Get the mail item's body format (plain text or HTML) and log it to the + console. + + Office.context.mailbox.item.body.getTypeAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log("Body format: " + asyncResult.value); + }); +'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 + + /* 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!'. + */ + + const text = $("#text-field").val(); + + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.prependAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log(`"${text}" prepended to the body.`); + }); + }); +'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 + + 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=="; + + // 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 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 image added to the body."); + } else { + console.log(setResult.error.message); + } + }); + } else { + console.log(attachResult.error.message); + } + }); + } else { + console.log(bodyResult.error.message); + } + }); +'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 + + /* 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!'. + */ + + const text = $("#text-field").val(); + + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.setSelectedDataAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log(`Replaced selected text with "${text}".`); + }); + }); 'Office.Body#setSignatureAsync:member(1)': - >- // Link to full sample: @@ -10855,7 +11039,7 @@ 'Office.MessageCompose#setSelectedDataAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml + 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) { diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 91822cf32..2b7b6b9c5 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -2,8 +2,11 @@ "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/10-roaming-settings/roaming-settings.yaml", "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml", - "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/set-selected-data.yaml", + "outlook-item-body-replace-selected-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/replace-selected-text.yaml", "outlook-item-body-add-inline-base64-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml", + "outlook-item-body-get-body-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-body-format.yaml", + "outlook-item-body-append-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/append-text-on-send.yaml", + "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-save-and-close-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.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", @@ -55,6 +58,7 @@ "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", "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml", "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml", diff --git a/view/outlook.json b/view/outlook.json index 3e4266933..d5923077c 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -2,8 +2,11 @@ "outlook-roaming-settings-roaming-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/10-roaming-settings/roaming-settings.yaml", "outlook-item-custom-properties-load-set-get-save": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/15-item-custom-properties/load-set-get-save.yaml", "outlook-item-body-get-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/get-selected-data.yaml", - "outlook-item-body-set-selected-data": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/set-selected-data.yaml", + "outlook-item-body-replace-selected-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/replace-selected-text.yaml", "outlook-item-body-add-inline-base64-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/add-inline-base64-image.yaml", + "outlook-item-body-get-body-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/get-body-format.yaml", + "outlook-item-body-append-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/append-text-on-send.yaml", + "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-save-and-close-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/25-item-save-and-close/close.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", @@ -55,6 +58,7 @@ "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", "outlook-other-item-apis-get-internet-message-id-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-internet-message-id-read.yaml", "outlook-other-item-apis-get-item-class-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-class-read.yaml", "outlook-other-item-apis-get-item-type": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-item-type.yaml", From c8309369806b813355049a6b666b50be1d158acd Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 30 Aug 2022 12:34:30 -0700 Subject: [PATCH 110/336] [Outlook] (appendOnSendAsync) Add manifest note and walkthrough link to snippet (#695) * Add manifest note and walkthrough link to appendOnSendAsync snippet * Apply suggestion from review Co-authored-by: Elizabeth Samuel * Fix HTML format Co-authored-by: Elizabeth Samuel --- samples/outlook/20-item-body/append-text-on-send.yaml | 1 + 1 file changed, 1 insertion(+) 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 14f056e71..c4cea6455 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -41,6 +41,7 @@ template:

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.

From dd150f85573199c2ce099d21a5480e2d8ec66647 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 2 Sep 2022 15:15:05 -0700 Subject: [PATCH 111/336] [Outlook] (attachments) Clarify how to get attachments in read and compose mode (#697) * Clarify getting an attachment in read and compose mode * Apply suggestion from review Co-authored-by: Elizabeth Samuel * Fix typo * Added a comment for clarification Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 2 +- playlists/outlook.yaml | 2 +- .../get-attachment-content.yaml | 116 +++++---- snippet-extractor-metadata/outlook.xlsx | Bin 23307 -> 23284 bytes snippet-extractor-output/snippets.yaml | 220 ++++++------------ 5 files changed, 152 insertions(+), 188 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 2d878022e..af58f2a4a 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -257,7 +257,7 @@ - id: outlook-attachments-get-attachment-content name: Get attachment content fileName: get-attachment-content.yaml - description: Gets the attachment content. + description: Gets the attachment content in read or compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml group: Attachments diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 97df3d6f4..d2d34b61e 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -257,7 +257,7 @@ - id: outlook-attachments-get-attachment-content name: Get attachment content fileName: get-attachment-content.yaml - description: Gets the attachment content. + description: Gets the attachment content in read or compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/40-attachments/get-attachment-content.yaml group: Attachments diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index 049b48671..f1b42a8ca 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -1,66 +1,101 @@ id: outlook-attachments-get-attachment-content name: Get attachment content -description: Gets the attachment content. +description: Gets the attachment content in read or compose mode. host: OUTLOOK api_set: Mailbox: '1.8' script: content: | - $("#run").click(run); + $("#attachment-content-compose").click(getAttachmentContentCompose); + $("#attachment-content-read").click(getAttachmentContentRead); - function run() { - const item = Office.context.mailbox.item; - const options = {asyncContext: {currentItem: item}}; - item.getAttachmentsAsync(options, callback); + const item = Office.context.mailbox.item; - function callback(result) { - if (result.value.length > 0) { - for (let i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } + 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) { + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + + if (result.value.length <= 0) { + console.log("Mail item has no attachments."); + return; } - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + 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); } + } + } + + 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. + const attachments = item.attachments; + if (attachments.length <= 0) { + console.log("Mail item has no attachments."); + return; + } + + for (let i = 0; i < attachments.length; i++) { + // Log the attachment type and its contents to the console. + item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); + } + } + + function handleAttachmentsCallback(result) { + // Identifies whether the attachment is a base64-encoded string, .eml file, .icalendar file, or a URL. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log("Attachment is a base64-encoded string."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that aren't supported. + } + + console.log(result.value.content); } language: typescript template: - content: | + content: |-
-

This sample shows how to get the attachment content from a message or an appointment.

+

This sample gets the attachment content from a message or an appointment in read or compose mode.

+

Required mode: Compose or Read

-

Try it out

- +
+
language: html style: - content: | + content: |- section.samples { margin-top: 20px; } @@ -68,7 +103,6 @@ style: section.samples .ms-Button, section.setup .ms-Button { display: block; margin-bottom: 5px; - margin-left: 20px; min-width: 80px; } language: css diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index b1df340a883bf10362bc69613bb7e738f475136a..c225608d68ad7987126dbd22c1e0225f6d698ce4 100644 GIT binary patch delta 11089 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 P7vop-n9%Mu{~h>W{JYe< delta 11095 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 0) { - for (let i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } - } + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + if (result.value.length <= 0) { + console.log("Mail item has no attachments."); + return; + } - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + 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.AppointmentCompose#categories:member': - >- @@ -8821,44 +8808,21 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - const item = Office.context.mailbox.item; - - const options = {asyncContext: {currentItem: item}}; + // Gets the attachments of the current message or appointment in read mode. - item.getAttachmentsAsync(options, callback); + // The item.attachments call can only be used in read mode. + const attachments = item.attachments; - function callback(result) { - if (result.value.length > 0) { - for (let i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } + if (attachments.length <= 0) { + console.log("Mail item has no attachments."); + return; } - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + for (let i = 0; i < attachments.length; i++) { + // Log the attachment type and its contents to the console. + item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } 'Office.AppointmentRead#attachments:member': - >- @@ -10331,27 +10295,29 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + // Identifies whether the attachment is a base64-encoded string, .eml file, .icalendar file, or a URL. + switch (result.value.format) { + case Office.MailboxEnums.AttachmentContentFormat.Base64: + // Handle file attachment. + console.log("Attachment is a base64-encoded string."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Eml: + // Handle email item attachment. + console.log("Attachment is a message."); + break; + case Office.MailboxEnums.AttachmentContentFormat.ICalendar: + // Handle .icalender attachment. + console.log("Attachment is a calendar item."); + break; + case Office.MailboxEnums.AttachmentContentFormat.Url: + // Handle cloud attachment. + console.log("Attachment is a cloud attachment."); + break; + default: + // Handle attachment formats that aren't supported. + } + + console.log(result.value.content); } 'Office.MailboxEnums.AttachmentType:enum': - >- @@ -11358,44 +11324,31 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - const item = Office.context.mailbox.item; + // Gets the attachments of the current message or appointment in compose + mode. - const options = {asyncContext: {currentItem: item}}; + const options = { asyncContext: { currentItem: item } }; + + // The getAttachmentsAsync call can only be used in compose mode. item.getAttachmentsAsync(options, callback); function callback(result) { - if (result.value.length > 0) { - for (let i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } - } + if (result.status === Office.AsyncResultStatus.Failed) { + console.log(result.error.message); + return; + } + if (result.value.length <= 0) { + console.log("Mail item has no attachments."); + return; + } - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + 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.MessageCompose#categories:member': - >- @@ -11860,44 +11813,21 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - const item = Office.context.mailbox.item; + // Gets the attachments of the current message or appointment in read mode. - const options = {asyncContext: {currentItem: item}}; + // The item.attachments call can only be used in read mode. - item.getAttachmentsAsync(options, callback); + const attachments = item.attachments; - - function callback(result) { - if (result.value.length > 0) { - for (let i = 0 ; i < result.value.length ; i++) { - result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); - } - } + if (attachments.length <= 0) { + console.log("Mail item has no attachments."); + return; } - function handleAttachmentsCallback(result) { - // Parse string to be a url, an .eml file, a base64-encoded string, or an .icalendar file. - switch (result.value.format) { - case Office.MailboxEnums.AttachmentContentFormat.Base64: - // Handle file attachment. - console.log(result.value.content); - break; - case Office.MailboxEnums.AttachmentContentFormat.Eml: - // Handle email item attachment. - console.log("Attachment is a message."); - break; - case Office.MailboxEnums.AttachmentContentFormat.ICalendar: - // Handle .icalender attachment. - console.log("Attachment is a calendar item."); - break; - case Office.MailboxEnums.AttachmentContentFormat.Url: - // Handle cloud attachment. - console.log("Attachment is a cloud attachment."); - break; - default: - // Handle attachment formats that are not supported. - } + for (let i = 0; i < attachments.length; i++) { + // Log the attachment type and its contents to the console. + item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); } 'Office.MessageRead#attachments:member': - >- From cf1f9d678ddf005c266692c69ab9055c555326a6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 15 Sep 2022 13:57:18 -0700 Subject: [PATCH 112/336] [Word] Update metadata reference (#700) --- snippet-extractor-metadata/word.xlsx | Bin 15555 -> 15546 bytes snippet-extractor-output/snippets.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 89ab318a58363656ac25e6fa9704bd805f77d907..142ade11a17a6b4d1836200170b84e5bce53f2ea 100644 GIT binary patch delta 4334 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 delta 4354 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 // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml From a983e196cf6374009eee0c818711bba06821592d Mon Sep 17 00:00:00 2001 From: "microsoft-github-policy-service[bot]" <77245923+microsoft-github-policy-service[bot]@users.noreply.github.com> Date: Thu, 15 Sep 2022 13:58:22 -0700 Subject: [PATCH 113/336] Microsoft mandatory file (#701) Co-authored-by: microsoft-github-policy-service[bot] <77245923+microsoft-github-policy-service[bot]@users.noreply.github.com> --- SECURITY.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 SECURITY.md diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..e138ec5d6 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * 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 + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). + + From 59468b86ecc87c870fdf42cffe7055810772b048 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 20 Sep 2022 15:54:19 -0700 Subject: [PATCH 114/336] [all hosts] Learn Rebrand (#704) --- samples/excel/90-scenarios/performance-optimization.yaml | 2 +- samples/outlook/20-item-body/append-text-on-send.yaml | 2 +- samples/outlook/75-entities-and-regex-matches/contextual.yaml | 2 +- samples/outlook/75-entities-and-regex-matches/selected.yaml | 2 +- samples/word/50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- samples/word/50-document/manage-footnotes.yaml | 2 +- snippet-extractor-output/snippets.yaml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index 345393feb..b1fa056cc 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -39,7 +39,7 @@ script: cell.values = [[i * j * Math.random()]]; // If other parts of the sample have toggled tracking off, we will avoid tracking this range and having to manage the proxy objects. - // For more information, see https://docs.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects + // For more information, see https://learn.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects if (untrack) { cell.untrack(); } 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 c4cea6455..b324ac54c 100644 --- a/samples/outlook/20-item-body/append-text-on-send.yaml +++ b/samples/outlook/20-item-body/append-text-on-send.yaml @@ -41,7 +41,7 @@ template:

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.

+

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.

diff --git a/samples/outlook/75-entities-and-regex-matches/contextual.yaml b/samples/outlook/75-entities-and-regex-matches/contextual.yaml index 3e30783aa..2545a24d6 100644 --- a/samples/outlook/75-entities-and-regex-matches/contextual.yaml +++ b/samples/outlook/75-entities-and-regex-matches/contextual.yaml @@ -44,7 +44,7 @@ template:
-

Try it out while running this as a contextual add-in

+

Try it out while running this as a contextual add-in

diff --git a/samples/outlook/75-entities-and-regex-matches/selected.yaml b/samples/outlook/75-entities-and-regex-matches/selected.yaml index 33d30150e..7db08858f 100644 --- a/samples/outlook/75-entities-and-regex-matches/selected.yaml +++ b/samples/outlook/75-entities-and-regex-matches/selected.yaml @@ -82,7 +82,7 @@ template:
-

Try it out while running this as a contextual add-in

+

Try it out while running this as a contextual add-in

diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index d4cd2533d..c37bdfd33 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -100,7 +100,7 @@ template:

This sample shows basic operations of the Track Changes feature.

Important: The WordApiOnline 1.1 requirement set is needed for this sample. See Word + href="https://learn.microsoft.com/javascript/api/requirement-sets/word/word-api-requirement-sets">Word JavaScript API requirement sets for supported Word clients.

diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 747040c09..8ce66f726 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -192,7 +192,7 @@ template:

This sample shows basic operations using comments.

Important: The WordApiOnline 1.1 requirement set is needed for this sample. See Word JavaScript + href="https://learn.microsoft.com/javascript/api/requirement-sets/word/word-api-requirement-sets">Word JavaScript API requirement sets for supported Word clients.

diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 5c319953a..40ebbd426 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -171,7 +171,7 @@ template:

This sample shows basic operations using footnotes.

Important: The WordApiOnline 1.1 requirement set is needed for this sample. See Word JavaScript + href="https://learn.microsoft.com/javascript/api/requirement-sets/word/word-api-requirement-sets">Word JavaScript API requirement sets for supported Word clients.

diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 464e1fab4..03440bd09 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -63,7 +63,7 @@ cell.values = [[i * j * Math.random()]]; // If other parts of the sample have toggled tracking off, we will avoid tracking this range and having to manage the proxy objects. - // For more information, see https://docs.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects + // For more information, see https://learn.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects if (untrack) { cell.untrack(); } From df5bcd1307c8bef284e0f33ca07fff9dfe325649 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 26 Sep 2022 08:36:03 -0700 Subject: [PATCH 115/336] [Word] (1.4) Promote to GA (#699) * [Word] (1,4, HiddenDocument 1.4) Promote to GA * Update fields snippets based on feedback that design changed --- playlists-prod/word.yaml | 18 +++++------ playlists/word.yaml | 18 +++++------ .../manage-fields.yaml | 14 +++++---- snippet-extractor-metadata/word.xlsx | Bin 15546 -> 15545 bytes snippet-extractor-output/snippets.yaml | 28 +++++++++++------- view-prod/word.json | 4 +-- view/word.json | 4 +-- 7 files changed, 48 insertions(+), 38 deletions(-) rename samples/word/{99-preview-apis => 50-document}/manage-fields.yaml (93%) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index c508a8807..d26dd332c 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -215,6 +215,15 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-fields + name: Get fields + fileName: manage-fields.yaml + description: This sample shows how to get existing fields. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -242,14 +251,5 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml group: Preview APIs - api_set: - WordApi: '1.4' -- id: word-manage-fields - name: Get fields - fileName: manage-fields.yaml - description: This sample shows how to get existing fields. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml - group: Preview APIs api_set: WordApi: '1.4' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index 1bbe8a923..ffb8540de 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -215,6 +215,15 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-fields + name: Get fields + fileName: manage-fields.yaml + description: This sample shows how to get existing fields. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-fields.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -244,12 +253,3 @@ group: Preview APIs api_set: WordApi: '1.4' -- id: word-manage-fields - name: Get fields - fileName: manage-fields.yaml - description: This sample shows how to get existing fields. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-fields.yaml - group: Preview APIs - api_set: - WordApi: '1.4' diff --git a/samples/word/99-preview-apis/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml similarity index 93% rename from samples/word/99-preview-apis/manage-fields.yaml rename to samples/word/50-document/manage-fields.yaml index f97e17ce0..4989589c4 100644 --- a/samples/word/99-preview-apis/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,4 +1,5 @@ -id: word-manage-fields +order: 5 +id: word-document-manage-fields name: Get fields description: This sample shows how to get existing fields. host: WORD @@ -23,7 +24,7 @@ script: console.log("There are no fields in this document."); } else { console.log("Code of first field: " + field.code); - console.log("Result of first field: " + field.result); + console.log("Result of first field: " + JSON.stringify(field.result)); } }); } @@ -55,9 +56,12 @@ script: 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: ${fields.items[i].result}`); + console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); } } }); @@ -141,8 +145,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/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 142ade11a17a6b4d1836200170b84e5bce53f2ea..1e92c64ea3e1b2683cab307feaed659a17462fa9 100644 GIT binary patch delta 5832 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml // Gets all fields in the document body. @@ -13263,9 +13263,12 @@ 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: ${fields.items[i].result}`); + console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); } } }); @@ -13804,7 +13807,7 @@ 'Word.Field#code:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml // Gets the first field in the document body. @@ -13818,13 +13821,13 @@ console.log("There are no fields in this document."); } else { console.log("Code of first field: " + field.code); - console.log("Result of first field: " + field.result); + console.log("Result of first field: " + JSON.stringify(field.result)); } }); 'Word.Field#parentBody:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + 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. @@ -13844,7 +13847,7 @@ 'Word.Field#result:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml // Gets the first field in the document body. @@ -13858,13 +13861,13 @@ console.log("There are no fields in this document."); } else { console.log("Code of first field: " + field.code); - console.log("Result of first field: " + field.result); + console.log("Result of first field: " + JSON.stringify(field.result)); } }); 'Word.FieldCollection#getFirstOrNullObject:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml // Gets the first field in the document body. @@ -13878,13 +13881,13 @@ console.log("There are no fields in this document."); } else { console.log("Code of first field: " + field.code); - console.log("Result of first field: " + field.result); + console.log("Result of first field: " + JSON.stringify(field.result)); } }); 'Word.FieldCollection#items:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml // Gets all fields in the document body. @@ -13896,9 +13899,12 @@ 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: ${fields.items[i].result}`); + console.log(`Field ${i + 1}'s result: ${JSON.stringify(fields.items[i].result)}`); } } }); diff --git a/view-prod/word.json b/view-prod/word.json index 48b830237..3a9418fb1 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -22,8 +22,8 @@ "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-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", "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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", - "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/manage-fields.yaml" + "word-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 129739b5a..95073669b 100644 --- a/view/word.json +++ b/view/word.json @@ -22,8 +22,8 @@ "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-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", "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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", - "word-manage-fields": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/manage-fields.yaml" + "word-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml" } \ No newline at end of file From 6e6b89d83bf377e0304ce2ec7e204f7bde954772 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Mon, 10 Oct 2022 15:58:08 -0700 Subject: [PATCH 116/336] [Excel] (ExcelApi 1.16) Promote snippets from preview to GA (#708) * [Excel] (ExcelApi 1.16) Promote snippets from preview to GA * Adjust capitalization, move custom functions snippet to that folder * Run yarn start * Remove unnecessary white space --- playlists-prod/excel.yaml | 156 +++++++++--------- playlists/excel.yaml | 156 +++++++++--------- .../data-types-custom-functions.yaml | 10 +- .../data-types-entity-attribution.yaml | 8 +- .../data-types-entity-values.yaml | 10 +- .../data-types-error-values.yaml | 6 +- .../data-types-formatted-number.yaml | 8 +- .../data-types-references.yaml | 8 +- .../data-types-web-image.yaml | 8 +- snippet-extractor-output/snippets.yaml | 16 +- view-prod/excel.json | 14 +- view/excel.json | 14 +- 12 files changed, 207 insertions(+), 207 deletions(-) rename samples/excel/{85-preview-apis => 16-custom-functions}/data-types-custom-functions.yaml (98%) rename samples/excel/{85-preview-apis => 20-data-types}/data-types-entity-attribution.yaml (98%) rename samples/excel/{85-preview-apis => 20-data-types}/data-types-entity-values.yaml (98%) rename samples/excel/{85-preview-apis => 20-data-types}/data-types-error-values.yaml (95%) rename samples/excel/{85-preview-apis => 20-data-types}/data-types-formatted-number.yaml (97%) rename samples/excel/{85-preview-apis => 20-data-types}/data-types-references.yaml (99%) rename samples/excel/{85-preview-apis => 20-data-types}/data-types-web-image.yaml (98%) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 5818710b8..70e67c99d 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -267,6 +267,17 @@ group: Custom Functions api_set: CustomFunctionsRuntime: 1.2 +- id: excel-data-types-custom-functions + name: 'Data types: Custom functions' + fileName: data-types-custom-functions.yaml + description: >- + This sample shows how to write custom functions that return entity value + data types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/data-types-custom-functions.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.4 - 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 @@ -285,6 +296,73 @@ group: Custom XML Parts api_set: ExcelApi: '1.5' +- id: excel-data-types-formatted-number + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-formatted-number.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-web-image + name: 'Data types: Web images' + fileName: data-types-web-image.yaml + description: >- + This sample shows how to set and get web images in a worksheet using data + types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-web-image.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-entity-values + name: 'Data types: Create entity cards from data in a table' + fileName: data-types-entity-values.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-values.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-error-values + name: 'Data types: Set error values' + fileName: data-types-error-values.yaml + description: This sample shows how to set a cell value to 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 + api_set: + ExcelApi: '1.16' +- id: excel-data-types-entity-attribution + name: 'Data types: Entity value attribution properties' + fileName: data-types-entity-attribution.yaml + description: >- + This sample shows how to set data provider attributions on entity values in + the card layout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-attribution.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-references + name: 'Data types: Entity values with references' + fileName: data-types-references.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-references.yaml + group: Data Types + api_set: + ExcelApi: '1.16' - id: excel-data-validation name: Data validation fileName: data-validation.yaml @@ -1165,84 +1243,6 @@ group: Worksheet api_set: ExcelApi: '1.1' -- id: excel-data-types-formatted-number - 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. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-web-image - name: 'Data types: Web images' - fileName: data-types-web-image.yaml - description: >- - This sample shows how to set and get web images in a worksheet using data - types. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-entity-values - name: 'Data types: Create entity values from data in a table' - fileName: data-types-entity-values.yaml - description: >- - This sample shows how to create entity values for each row in a table. An - entity value is a container for data types, similar to an object in - object-oriented programming. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-error-values - name: 'Data types: Set error values' - fileName: data-types-error-values.yaml - description: This sample shows how to set a cell value to an error data type. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-custom-functions - name: 'Data types: Custom functions' - fileName: data-types-custom-functions.yaml - description: >- - This sample shows how to write custom functions that return entity value - data types. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-custom-functions.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-entity-attribution - name: 'Data types: Entity value attribution properties' - fileName: data-types-entity-attribution.yaml - description: >- - This sample shows how to set data provider attributions on entity values in - the card layout. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-attribution.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-references - name: 'Data types: Entity values with references' - fileName: data-types-references.yaml - 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. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-references.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index 1fbc93305..f18d0af95 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -267,6 +267,17 @@ group: Custom Functions api_set: CustomFunctionsRuntime: 1.2 +- id: excel-data-types-custom-functions + name: 'Data types: Custom functions' + fileName: data-types-custom-functions.yaml + description: >- + This sample shows how to write custom functions that return entity value + data types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/data-types-custom-functions.yaml + group: Custom Functions + api_set: + CustomFunctionsRuntime: 1.4 - 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 @@ -285,6 +296,73 @@ group: Custom XML Parts api_set: ExcelApi: '1.5' +- id: excel-data-types-formatted-number + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-formatted-number.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-web-image + name: 'Data types: Web images' + fileName: data-types-web-image.yaml + description: >- + This sample shows how to set and get web images in a worksheet using data + types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-web-image.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-entity-values + name: 'Data types: Create entity cards from data in a table' + fileName: data-types-entity-values.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-entity-values.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-error-values + name: 'Data types: Set error values' + fileName: data-types-error-values.yaml + description: This sample shows how to set a cell value to 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 + api_set: + ExcelApi: '1.16' +- id: excel-data-types-entity-attribution + name: 'Data types: Entity value attribution properties' + fileName: data-types-entity-attribution.yaml + description: >- + This sample shows how to set data provider attributions on entity values in + the card layout. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-entity-attribution.yaml + group: Data Types + api_set: + ExcelApi: '1.16' +- id: excel-data-types-references + name: 'Data types: Entity values with references' + fileName: data-types-references.yaml + 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. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-references.yaml + group: Data Types + api_set: + ExcelApi: '1.16' - id: excel-data-validation name: Data validation fileName: data-validation.yaml @@ -1165,84 +1243,6 @@ group: Worksheet api_set: ExcelApi: '1.1' -- id: excel-data-types-formatted-number - 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. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-web-image - name: 'Data types: Web images' - fileName: data-types-web-image.yaml - description: >- - This sample shows how to set and get web images in a worksheet using data - types. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-entity-values - name: 'Data types: Create entity values from data in a table' - fileName: data-types-entity-values.yaml - description: >- - This sample shows how to create entity values for each row in a table. An - entity value is a container for data types, similar to an object in - object-oriented programming. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-error-values - name: 'Data types: Set error values' - fileName: data-types-error-values.yaml - description: This sample shows how to set a cell value to an error data type. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-custom-functions - name: 'Data types: Custom functions' - fileName: data-types-custom-functions.yaml - description: >- - This sample shows how to write custom functions that return entity value - data types. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-custom-functions.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-entity-attribution - name: 'Data types: Entity value attribution properties' - fileName: data-types-entity-attribution.yaml - description: >- - This sample shows how to set data provider attributions on entity values in - the card layout. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-attribution.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) -- id: excel-data-types-references - name: 'Data types: Entity values with references' - fileName: data-types-references.yaml - 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. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-references.yaml - group: Preview APIs - api_set: - ExcelApi: BETA (PREVIEW ONLY) - id: excel-performance-optimization name: Performance optimization fileName: performance-optimization.yaml diff --git a/samples/excel/85-preview-apis/data-types-custom-functions.yaml b/samples/excel/16-custom-functions/data-types-custom-functions.yaml similarity index 98% rename from samples/excel/85-preview-apis/data-types-custom-functions.yaml rename to samples/excel/16-custom-functions/data-types-custom-functions.yaml index d6aa5a5c8..a5ebdbab6 100644 --- a/samples/excel/85-preview-apis/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -1,10 +1,10 @@ -order: 5 +order: 6 id: excel-data-types-custom-functions name: 'Data types: Custom functions' description: This sample shows how to write custom functions that return entity value data types. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + CustomFunctionsRuntime: 1.4 script: content: | /** @@ -326,9 +326,9 @@ script: } ]; language: typescript -libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview +libraries: | + https://appsforoffice.microsoft.com/lib/1/hosted/office.js + @types/office-js core-js@2.4.1/client/core.min.js @types/core-js \ No newline at end of file diff --git a/samples/excel/85-preview-apis/data-types-entity-attribution.yaml b/samples/excel/20-data-types/data-types-entity-attribution.yaml similarity index 98% rename from samples/excel/85-preview-apis/data-types-entity-attribution.yaml rename to samples/excel/20-data-types/data-types-entity-attribution.yaml index 0fd3ce74d..c5c2be217 100644 --- a/samples/excel/85-preview-apis/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -1,10 +1,10 @@ -order: 6 +order: 5 id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' description: This sample shows how to set data provider attributions on entity values in the card layout. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.16' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -221,8 +221,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/excel/85-preview-apis/data-types-entity-values.yaml b/samples/excel/20-data-types/data-types-entity-values.yaml similarity index 98% rename from samples/excel/85-preview-apis/data-types-entity-values.yaml rename to samples/excel/20-data-types/data-types-entity-values.yaml index e3fd81536..eb04c1260 100644 --- a/samples/excel/85-preview-apis/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -1,10 +1,10 @@ order: 3 id: excel-data-types-entity-values -name: 'Data types: Create entity values from data in a table' -description: 'This sample shows how to create entity values for each row in a table. An entity value is a container for data types, similar to an object in object-oriented programming.' +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.' host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.16' script: content: |- $("#setup").click(() => tryCatch(setup)); @@ -589,8 +589,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/excel/85-preview-apis/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml similarity index 95% rename from samples/excel/85-preview-apis/data-types-error-values.yaml rename to samples/excel/20-data-types/data-types-error-values.yaml index 613f84433..898a52073 100644 --- a/samples/excel/85-preview-apis/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -4,7 +4,7 @@ name: 'Data types: Set error values' description: This sample shows how to set a cell value to an error data type. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.16' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -80,8 +80,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/excel/85-preview-apis/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml similarity index 97% rename from samples/excel/85-preview-apis/data-types-formatted-number.yaml rename to samples/excel/20-data-types/data-types-formatted-number.yaml index df3a91a76..e534b3226 100644 --- a/samples/excel/85-preview-apis/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -4,7 +4,7 @@ name: 'Data types: Formatted numbers' description: This sample shows how to set and get data types using the formatted number properties. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.16' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -143,9 +143,9 @@ style: min-width: 80px; } language: css -libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview +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 diff --git a/samples/excel/85-preview-apis/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml similarity index 99% rename from samples/excel/85-preview-apis/data-types-references.yaml rename to samples/excel/20-data-types/data-types-references.yaml index 4527a8486..d7e5c1020 100644 --- a/samples/excel/85-preview-apis/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -1,10 +1,10 @@ -order: 7 +order: 6 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.' host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.16' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -332,8 +332,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/excel/85-preview-apis/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml similarity index 98% rename from samples/excel/85-preview-apis/data-types-web-image.yaml rename to samples/excel/20-data-types/data-types-web-image.yaml index 7cb9e5d93..5cdf97001 100644 --- a/samples/excel/85-preview-apis/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -4,7 +4,7 @@ name: 'Data types: Web images' description: This sample shows how to set and get web images in a worksheet using data types. host: EXCEL api_set: - ExcelApi: BETA (PREVIEW ONLY) + ExcelApi: '1.16' script: content: | $("#setup").click(() => tryCatch(setup)); @@ -186,9 +186,9 @@ style: padding: 5px; } language: css -libraries: |- - https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview +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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index a8895cf9c..2da12d66f 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -721,7 +721,7 @@ 'Excel.CellValueType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml + 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. @@ -3340,7 +3340,7 @@ 'Excel.ErrorCellValue:type': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml + 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. @@ -3363,7 +3363,7 @@ 'Excel.ErrorCellValueType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml + 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. @@ -3516,7 +3516,7 @@ 'Excel.FormattedNumberCellValue#numberFormat:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml + 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, @@ -3543,7 +3543,7 @@ 'Excel.FormattedNumberCellValue#type:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml + 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, @@ -5425,7 +5425,7 @@ 'Excel.Range#valuesAsJson:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml + 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, @@ -6676,7 +6676,7 @@ 'Excel.WebImageCellValue#address:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml + 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. @@ -6703,7 +6703,7 @@ 'Excel.WebImageCellValue#type:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml + 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. diff --git a/view-prod/excel.json b/view-prod/excel.json index 74237f3cb..b63964555 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -28,9 +28,16 @@ "excel-custom-functions-streaming": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/16-custom-functions/streaming-function.yaml", "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-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-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", + "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-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", @@ -122,13 +129,6 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-formatted-number.yaml", - "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-web-image.yaml", - "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-values.yaml", - "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-error-values.yaml", - "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-custom-functions.yaml", - "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", - "excel-data-types-references": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/85-preview-apis/data-types-references.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml", diff --git a/view/excel.json b/view/excel.json index 25ec0d163..dda933309 100644 --- a/view/excel.json +++ b/view/excel.json @@ -28,9 +28,16 @@ "excel-custom-functions-streaming": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/16-custom-functions/streaming-function.yaml", "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-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-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", + "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-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", @@ -122,13 +129,6 @@ "excel-worksheet-reference-worksheets-by-relative-position": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml", "excel-worksheet-tab-color": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/tab-color.yaml", "excel-worksheet-visibility": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/54-worksheet/worksheet-visibility.yaml", - "excel-data-types-formatted-number": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-formatted-number.yaml", - "excel-data-types-web-image": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-web-image.yaml", - "excel-data-types-entity-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-values.yaml", - "excel-data-types-error-values": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-error-values.yaml", - "excel-data-types-custom-functions": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-custom-functions.yaml", - "excel-data-types-entity-attribution": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-entity-attribution.yaml", - "excel-data-types-references": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/85-preview-apis/data-types-references.yaml", "excel-performance-optimization": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/performance-optimization.yaml", "excel-scenarios-report-generation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/report-generation.yaml", "excel-scenarios-multiple-property-set": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/90-scenarios/multiple-property-set.yaml", From c36d9c5c5837d49e1274c77132fb9fc6a655408f Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 11 Oct 2022 08:37:05 -0700 Subject: [PATCH 117/336] [Word] (Settings) Add sample for SettingCollection (#709) * [Word] (Settings) Add sample for SettingCollection * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback 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-settings.yaml | 134 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 15545 -> 15719 bytes snippet-extractor-output/snippets.yaml | 84 +++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 242 insertions(+) create mode 100644 samples/word/50-document/manage-settings.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index d26dd332c..2a6da0744 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -224,6 +224,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-settings + name: Manage settings + fileName: manage-settings.yaml + description: >- + This sample shows how to add, edit, get, and delete custom settings on a + document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index ffb8540de..b8256c1a1 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -224,6 +224,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-settings + name: Manage settings + fileName: manage-settings.yaml + description: >- + This sample shows how to add, edit, get, and delete custom settings on a + document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-settings.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml new file mode 100644 index 000000000..e81d34180 --- /dev/null +++ b/samples/word/50-document/manage-settings.yaml @@ -0,0 +1,134 @@ +order: 6 +id: word-document-manage-settings +name: Manage settings +description: 'This sample shows how to add, edit, get, and delete custom settings on a document.' +host: WORD +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)); + + async function addEditSetting() { + // Add a new custom setting, or edit 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); + }); + } + + async function getAllSettings() { + // Get all custom settings this add-in set on this document. + await Word.run(async (context) => { + const settings = context.document.settings; + settings.load("items"); + await context.sync(); + + if (settings.items.length == 0) { + console.log("There are no settings"); + } else { + console.log("All settings:"); + for (let i = 0; i < settings.items.length; i++) { + console.log(settings.items[i]); + } + } + }); + } + + async function deleteAllSettings() { + // Delete 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"); + }); + } + + /** 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, 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

+
+ + +
+
+ + +
+ +

Get all settings

+ +

Delete all settings

+ +
+ 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 1e92c64ea3e1b2683cab307feaed659a17462fa9..6be2bdf80445da23700a5aeb695a7b83542a19b8 100644 GIT binary patch delta 6865 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 TL*)% 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 MBoj)r$bZ}X7p%>`rT_o{ diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 2da12d66f..2297a60ad 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13793,6 +13793,27 @@ await context.sync(); console.log(JSON.stringify(builtInProperties, null, 4)); }); +'Word.Document#settings:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Get all custom settings this add-in set on this document. + + await Word.run(async (context) => { + const settings = context.document.settings; + settings.load("items"); + await context.sync(); + + if (settings.items.length == 0) { + console.log("There are no settings"); + } else { + console.log("All settings:"); + for (let i = 0; i < settings.items.length; i++) { + console.log(settings.items[i]); + } + } + }); 'Word.EventType:enum': - >- // Link to full sample: @@ -14528,6 +14549,69 @@ await context.sync(); }); +'Word.SettingCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Delete 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#items:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Get all custom settings this add-in set on this document. + + await Word.run(async (context) => { + const settings = context.document.settings; + settings.load("items"); + await context.sync(); + + if (settings.items.length == 0) { + console.log("There are no settings"); + } else { + console.log("All settings:"); + for (let i = 0; i < settings.items.length; i++) { + console.log(settings.items[i]); + } + } + }); +'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 + + // Add a new custom setting, or edit 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.Style:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 3a9418fb1..6622ffc88 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -23,6 +23,7 @@ "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", + "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml" diff --git a/view/word.json b/view/word.json index 95073669b..0e2f8f1df 100644 --- a/view/word.json +++ b/view/word.json @@ -23,6 +23,7 @@ "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", + "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-settings.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml" From 15faa1294e6aa3727acff554212b3609ce311364 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 12 Oct 2022 08:21:34 -0700 Subject: [PATCH 118/336] [Word] Remove online-only restriction from 1.4 features (#711) --- samples/word/50-document/manage-change-tracking.yaml | 12 +----------- samples/word/50-document/manage-comments.yaml | 11 +---------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index c37bdfd33..c3ae77184 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -62,13 +62,6 @@ 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 change tracking APIs." - ); - return; - } await Word.run(async (context) => { const body = context.document.body; body.clear(); @@ -99,11 +92,8 @@ template: content: |-

This sample shows basic operations of the Track Changes feature.

-

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

+

Set up

Set up

From b1be3c9b2865d6d4202cde0aa997006cdca77c20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 14:20:10 -0700 Subject: [PATCH 119/336] Bump async from 3.2.1 to 3.2.4 (#707) Bumps [async](https://github.com/caolan/async) from 3.2.1 to 3.2.4. - [Release notes](https://github.com/caolan/async/releases) - [Changelog](https://github.com/caolan/async/blob/master/CHANGELOG.md) - [Commits](https://github.com/caolan/async/compare/v3.2.1...v3.2.4) --- updated-dependencies: - dependency-name: async dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 143edee8c..610c63562 100644 --- a/yarn.lock +++ b/yarn.lock @@ -160,9 +160,9 @@ argparse@^1.0.7: sprintf-js "~1.0.2" async@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.1.tgz#d3274ec66d107a47476a4c49136aacdb00665fc8" - integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== balanced-match@^1.0.0: version "1.0.2" From e876972ad1b0fd4f48f7cad82216b3f4ea6a524b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 14 Oct 2022 11:55:37 -0700 Subject: [PATCH 120/336] [Word] Additional mappings for a couple of enums (#715) --- playlists-prod/word.yaml | 11 +- playlists/word.yaml | 11 +- .../content-control-ondeleted-event.yaml | 2 +- .../insert-and-get-pictures.yaml | 121 ++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 15719 -> 16031 bytes snippet-extractor-output/snippets.yaml | 174 +++++++++++++++--- view-prod/word.json | 3 +- view/word.json | 3 +- 8 files changed, 299 insertions(+), 26 deletions(-) create mode 100644 samples/word/99-preview-apis/insert-and-get-pictures.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 2a6da0744..833941991 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -263,4 +263,13 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml group: Preview APIs api_set: - WordApi: '1.4' \ No newline at end of file + WordApi: '1.5' +- id: word-insert-and-get-pictures + name: Use inline pictures + fileName: insert-and-get-pictures.yaml + description: Inserts and gets inline pictures. + rawUrl: >- + 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 diff --git a/playlists/word.yaml b/playlists/word.yaml index b8256c1a1..227c06395 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -263,4 +263,13 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml group: Preview APIs api_set: - WordApi: '1.4' + WordApi: '1.5' +- id: word-insert-and-get-pictures + name: Use inline pictures + fileName: insert-and-get-pictures.yaml + description: Inserts and gets inline pictures. + rawUrl: >- + 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' 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 707029581..9bbd8a317 100644 --- a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml +++ b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml @@ -3,7 +3,7 @@ name: Delete content controls description: 'Register, trigger, and deregister onDeleted event that tracks the removal of content controls.' host: WORD api_set: - WordApi: '1.4' + WordApi: '1.5' script: content: | $("#insert-content-controls").click(() => tryCatch(insertContentControls)); diff --git a/samples/word/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml new file mode 100644 index 000000000..e6d8816cf --- /dev/null +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -0,0 +1,121 @@ +id: word-insert-and-get-pictures +name: Use inline pictures +description: Inserts and gets inline pictures. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.1' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#insert").click(() => tryCatch(insertImage)); + $("#get").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() { + // Get the first image in the document. + await Word.run(async (context) => { + const firstPicture = context.document.body.inlinePictures.getFirst(); + firstPicture.load("width, height, imageFormat"); + + await context.sync(); + console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); + console.log(`Image format: ${firstPicture.imageFormat}`); + // Get the image encoded as base64. + const base64 = firstPicture.getBase64ImageSrc(); + + await context.sync(); + console.log(base64.value); + }); + } + + async function setup() { + // Setup by adding a dummy paragraph. + 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. ", + "End" + ); + 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 elements you want from the different Online 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); + } + } + + const base64Image = + "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"; + 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/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 6be2bdf80445da23700a5aeb695a7b83542a19b8..7e8dc1cf05ef2a73ce945f8c2908991073dae3a6 100644 GIT binary patch delta 8052 zcmZ8mWl$VSvt1SmED~&Sm*5fz1h>Evf&~c#2<|SyZE+TN*Wd(q2<}UO06~N6;u>5Z z-+f=zt@q}~)YSBuuBn+br@E)NJ#&1j)nB0YeCH@COVD~j0oAq7;3o9RsekgjSE|8y zg~3`X1+Ra%yV^K^GOh&D<&!TP@v5Hb}jF+XBOyJR~9(Tv?H^ALl>l)V^1Ou4$ zc#zLsXvsu#KmGAqWi4v7-7u@Q0<5bf_E30!+*H@9pPy2#8N^>aLU$2DRYr#f7@oe6 z&lTeR6s91@F^d4^w$tzOK4Dy;tE^0#t2qFO`e$ZVY3ZcvFduf)z&)T8m3fr-a9SD6NUi?v1_KzkfKPvYtU#LNFtj{nzL^&epH;dw+9j=1UTbk;T zp@8PtL=_$;HKFV=FUT@=;_VI6)a_E~UFOPEo@KK?;<%81WIUU-R%42lX@0nLz<_}{UA%`()@Q_#EWE~y?QJD*aH%1*$C^nLA*c^ zIWkdqC=LMdRWHF7iv#-py&p{vYvxpvXU*QFgKZ|p=RQZP47IWjFD9I7b#?R#X_CRT zrwr0D_jBi1)Ia|GQb`yW3zQ#nH(3d`Sih}waB3reh%_}F0DY2@iZR%kyxs_%(A$mD zLjD{O^qaxi)|T&Fq<5Ak&9V&i;Xa;?BduSv{Y;_I-&BbKlWPa+?3rznSAcC;LTy+g zLQG*6ZqJz5=x@QC+J8T)t&UJgxW~&h@vN)R{xSr@lUG6aa{l;%fm*EUL*bv=t{*Rb z;R1pd_o&y-V}^^5iVQ5x8j!8VD3hw8o5uUO2+;wqf`wb^p6hSLhD>{C9p3`33O8km zHBQj>I|yc4yY@Dqzk4g-__to;VHC@edlC|^ez?{n{u;m| z{)4s-8LdR>S?oxm;BWj{E&BFlOP~nE3D~drkB}P&K#m^TFYZVZ?>dzKF=mY=& zPf!1JiC-3?7x}Rsk_^Oih0lD#75!XA{!&YljSTIuwC=H*4H+A}E>xtcGgpBF?J|1>n?BAtS zLA{@@oo-5@H|LkZxt%t1heLOlPb)dU-*mP=KI|S|$k#m1YjZ8S8Z)-o+S*1qc-lu% za$Q^4`ZToL^|7{ccG>mv9}sm%YYnP67|iIYpDQ(7U;j2Dnvi%IRN(kq@B&GRd}eJ* z8+s?{Ov>ho_fY#gcMc7S>#MmbWN6|H?rDQwy-oFxBAlet*`%rA^QcDMvF{44t7d|iJJ`cXAC#DK^bujY+0KK zE4B(b{3Ajwr(z9@FpId&2s}GTa=CNBO)1;|P7j`}`H;pj4$U$yMzU+|GPuFo-uzxG zjJlbX>BI1E_YvhqrqmO{0DEkk<xd$qmSK2yCT2YvIMQ3)Qw_AyXc(L$7cTwb z9{j^N@nlm=I@7sBfVM7n8cz6{E~{4KEvuzEQ($U!%zEzOMmJeC9@69uFeEKbfNc@| zmfijcs{R@FD@gZ8pnE4Z8_V$=%y-xOp=Sgh35J+0V)Z6wRQQIYC;cL3H4&pMO5Gu$ zp}y~%TGBloL8HP_>aS}+fjG-=?-LmkYm}H_8*Y7_;KcJ^n#&@{yi~;?8NQ)^f%5@1V3~fbc8oH9k@fZDHuV zqNM=izLcHuhe$u2cRbS8DXh>qatzWJJ6t&9u0&+vu1JbQMCigifjNvtAXr6z9icz? z+@#T}<3(CHTW<0rJAG)y{i0Hjt?AvN z*X9gV{&Q>;QDtM~<<6Ep;8{|e%w&@q5cEkxU{vKmYtkErE(jFv6}^kMrMJ}ls5{0rY{W4+EuFi84?ER}q@<^Yx1Wlk~jv+?w(+b27N=_#g-9_an zvrT(S*%#Wd*tV%%LqBj^PyxW5^(MEhrlng)Kfsg4ONkX=EoW%Tu&x9%RTB16&3fyI zQpMQ^a;?DGlSEBaL9mN!KuVGbYOzNbzXV1KS{XJSncWE=McUYcM4Yy2A6RyDT_dMC zP;aQ_V!+o01{VN&1yVsxzmS=N1UjoJ$EyI4979n=YSIPOx z?xQPf*3uKjGY1}@$g=iXm+{1A7-OI!ga1^D!qb&CFb^BAj=QPH zAjELRQ?=lTo_8-Me7Br#Pw(~`vPtRRUK4YM(@JGJ5B7WvEA^WDB42YMGaqhU)|iU@yUgLKFj z(o9aj9^JL^hxIroEgWKvfgq%Z78U6WJ{)gF@lo zPV^Clq8|nt$)#1f()R1 z)B5`%u!ejBs5T5@Qx$dX1!_RMW4 zqs%kFoc4(catL+yyH83Xx!GmO+d@A$)l`MLbWx+Ge94^s!c_N^l$q70rcO!GU~5-% zc0;Y=l2Ek=_ZE6m@f;F8(!M9b^jimXRI76j@Y{v&2m`$yVs4f6);qVZPEo(;8CKxB zT<1F^l*Y+AcGY^_rmU+;&*RM*$9M>vRAt763%_dlfLI+ogX?*O#uew#-^O&|JRCsx zrJul9Iw=Jxm8n1C)IM}qAv33%L|zN#-Jl=DJtB>!tT0Kps*8ZX#zL|}3-BgOEFT$N zq!FVXBlLf@QrSpmCePR_jc|UK96pOuJYO6AyxnC3Wty@a+q_bC2UuLuvq(%3jV#_( z^lx@F`j0=v&xBx%@>JMsSufg(jD{MLYs&KxjL-Fr;Ni&{*nh}}C4?&7xbRF#%8Eaf zh!f=&Zf+u}dthfo60?=am@FO)3-Cnfg%W*C)T`^A6BnxRog$JT4b|KUe=!4`ftW=< ztC5#6Aef@wFYm&{l~XfpAZ#A611JXUHJh05AYjqYf<)~?F+N+6P3Y7DReA;ONA|YT z5IJEnkhy~;XZUc)BI;QDVi7{pX-LYELI6SzrnfwWR2)x;CiZLP5b65Gb!$PMoN-N> zh{!u|{)8sQYLzD8$Kg&7%x&s8mk6$Xxc2}x?OCzl%w7?QqQ6Fp%yem*Z#5!wH(un06NX~4_J^jc%gIdOz_xITZg%HxZyRZ_m3iuE0a{Acul4K2HI_cKZ87xV!&(vL@qn~1l!?zd-zzk4S2rB8B zYZ&Z#6Mf*V8Sng$F!7|>*BfAt5Jw!z*v!!{edZbvr)R_uEU{MY0{>0LM;#kMHuLWe{DmIr*ov*vgt}-szcrnl-%|&tsb6lHdWJNTWeoJVcBK>`tjS*4R^nNv zbekXM`a^RmK_%GBXT@|g;idSpEJ=RtARe63Dm=qy;W{$c&vW!Fbp(}=K3>RekRv*P z0o1MPl%y-Ny7cqUPwQCJa)w{&??$N?eE4|77P)g>`*nIA*FfW|le^Dk1MAdy9-8`_ zj=cBrOm73D>HjuTo`kWG$Q@iy+S zu|P^F3}XM28VYX^oHeG?HAv~U%*q!av7E?p5v`lyGes?h42U<^ycpT9*s z<^{Z~`FRUj4}4B9pR6sh2p!Uz2<;2IM$9(cjVSztu?-J?@t+(o5gdHOlpbTVTW&xF zvQ&GB;B?11?wsEDtt(H6T%x$*BtAg}ZMdD8?zys*{8s)JC>0~Ot<(i_Jk*rvV-M4J znmV%yoSvBC_^cOes9@XLc=1(#@YcjyN_iLeNd3!u$3szli*O!o=c4!Gf}9gOuS}q% zMvhjTWkXF8O#=yZ-t7sOz!}T~?Pc@4>*r;}N;hd)@x&(Zp^8pyFG#7J=C*S!Ln> z*rxkbzqqJj*$kVFaBx+ubx5mtYslZKWzRp&qqLFH`N}?zxDB>QfRo6PR`Dj#ErBeH za%d&X7ByW##AlXU!t19`+OLf!E&R}Fm&~9#LA{`e8y6xCt#~^`-360434hpV5uiYt0w6qwrapDwCl ziEodWm8!TZnme3lF^4MJGh6nD)0m{!DVrg)buaQ;|IovSMD3xpNm?uuF008Gsx4@b zX)8<1=xK5?@_NwH8EmW%r5t**EW2@Kx@MyR@>{Xav+_(r7|XicN`4QlU;di@; z4m>8U5Z);qpl)6h?rnW#deD`%ULhek^2Wp;{4+1qx(B0vXJ~CcNIQzCuFS2iM>P-5 zy&}Y|m0CDgn#c?_+)oa#T~2H2id(J$KNQk90Rag$C`#Z+iKBI)-5ggkM*LW zmgK3M+pNSYWDkTP=QHXPmNl-uwFWeskO3xE`N7E zTv99v`|&;0aEX@hQMnZLD-NgB#?jhMV~NX(@o2ae$zQF|zVB2mTdYyRbxvsJ=0nLV zB@@fCx@$E*+u4cf-kTyyvib6kF1fVdLYn&5=qT#7q~4WzV6EnITIJ!2QopMVqK3=* z1lj)lAz)R992kB&*<1VhY{ZfX-GnhRufsV_vr)kw`bUE#!aQ-tN?_BJk~atK(uNyY z4&sfNekb(V!?GB1U%}rViz7Rr)i6=#*miwLV5Sh-ZA9M5zcWs8^u`JT3)wX!M8K4& zl=816=-w!_y(({8ol4GZ4AX}1tua)fy>Jw-Rf?d{VA$g#7A8J><4R(enWMu!C#J9$ zewU>Hl^xT_ZN{6wMd6h$7`HQ-S?jJNo^b8*F;=~b>;;H$F@GI@@SW9^1WYKb zmr7ow>9}NzTc|^9v~gJ$zkZg6w$rU3IgdvVS}xM><9^RgTjZFV!k)h@irp#NQqVw) z`$rig&xuzmBROEGq;=f?-Ik9D$27=TR_c!=gR*x@(Yt3N4&l0UXSvj^l znKn%9<#yC+*3c~pui$4IQ#8F6ip=Fh1`!5&%xw%ZVab){MLV|L)882vfAGBEpFQ3t5umgEOhgh+5$+Q68=iZx##)7gSe z=p1N-Y3x3-OKW{n8b`tR5zd@R6(bl`9MiHk(()%ukm~~B4TxcUjE>>ZDlHSsh+}IS z>*l5_dV%a8oWq0Mk%wOgrumv1T_}^!zNQ7btmYwsOa?M!S_slQd3={ZOVA2 zMu$U_YUoq&t~`j??TxL_8_}=57Vmx7eQjh)s5%o$O@+DITWI!nThCKZA|=zppdKDw zG_hQi!zWTM!nqAotcc;OhL7z>bsAJD{4RT^Z&EjgY4c>fY2{y{Pj))r8j`DS@JEX5 z?QnZC4B-%itdfpFCNdxTo+~h}?1s*HEg3B##}vu5 z(&okUZOyCv{DGo_V*{WVgTv+XhD`qceooW9msym4`HTXSN|Z|VTl(6&yNj2AI$E|) zB-AIwF8y4>7CQ|zvDLzJmT1X? zHd&>x?Eon}u;YEpEQC zTA>w1ZvAf7j6^EgrD%6Dzo)$HDdxTT{p=yYY8Ly|8)e0Xpa)4d#UGxH-bYzEwduve zIS1a4^4{AkFgL}+rJb3zSK+31?RHjouVkfp>^u1q__$PW?5%3*G)Bs_WUBIua%_tS zsbyF!p;9396f6f8TxK?i<&a!j{98zOCrD{^c$LsP0cTf$>sqwt*pGy%{;C|T61bV!xoFL-ggORr*3vOQ zFLHjnB&g4s9b9aIKh4v{yGf(@vji~Z@u<$7W!iLC6&80CC5RV zZZAg%Y8ye4jH0k~IpW@JrfZ*z^WRZq$={d2FVsx})LNhJfk)w3F_=&UT56dh7gq3! zMSr=@&6fQK+$-5C{auXZ(TR5wC}O0C+XBLD_6ebb7x-W~1q3avA&)K-LHfw9?(KwG zOY_RBL-Moplg>T{3^|JU-Sh(IbX6X5yfHtqtF2>Z-+v;$x_DkKwEtF}PXtv_s6YTf zf&_>x!9WO?;@^TE06_Aby#3o$uo4`x$P$W#Sb;d?3EX7hgl!?*SN}iR`xhTY_iyT# zpf3!j_&3l500{rZJ&&YcB`66?0QK1uVuh7~9vlg4!h-*mHfj+t5X6~q#7>l;Ai@eH ze4TK^MV??Hj7#wkA)eDtDAi)-g#aY~fdvKTF4nHge3A#8e1Pw01gS)#22pV(=5Ht|r z@_u)9Z{5uwQ(g7+%v5#vbUodj7qstRtBsDzHT~SM24;Xx1#G;_=Ee`sYj{HX4Ywe| z!DK5NPH;&5T4vaGUFY6|sS9FQWrXTH-M|$Umwpr)k^tvt4%6KaLL1LkFhT@#G2b7X-ytY^d<09JM%!)ub@WF6mrtc`ArM_WGR z;)Nw8oSu6|3NiPKnae;XrC@-?sXT{fMK;?bLEdpGjdQjsjWhjckU~kU{jcMe2?T6?#JiN9GmjhT*TCPo3ALn2Z3r) z(kle3s@N`sha75!t;-&KsEe{0&O)m)$-j{$0p?A1xcIdS9Fbi z_jI~+vjeRAn=zAjf%vVgbd?Nw(pOa1oo;miX9yT6v#BWMT_)3kpLn6CG-(ng3eg5G z1`cZ`5ot0{RRqPAMobr9{tU+?dP8!!A7wqTWFj>mt!B!lGeat?AOs~ogcX9 zyt+1t){v{;Q5e?@_o%1ijRFsd1|^Ub;U-@%tb1ULz{(B>WvFM^XTPV{bk?p_f3lQ) zBJm{T{ORD?8|8>W8OKI;?2>V~#R?k5FZIqWFfNl9K1!g}V)r*nHC5ml49r7Z&yK~5 zjK$GsG#QNx0>$gX>~S~%JjNWTKC1qFs(;;NLlv%w36ar z-Tsr!prty^^%usPPjPQ_q{FM#F}01Y3k;brSC_196{71ZNA=6t6b_JZf--{taIdg- zfKfx36iQX3u^o@=_Q~IdSd~;bl)5tM8S=z-`JZGOJ{!wXNPBw#+y|-iXw0N>FWzu# z=VIew4>S|9txEHyj9WaG;5Q1-Fm|CcXMT4&#?$*E*RPb)OGA}HI5MPutYqKBR`)Xq zAFOswk%zzWo%LgOR}3TS(rD?LcM_se*fd?@mmJNG?X1^>k9pYe+!4$ zhDTonC9l-=qA(g?8SLnIItip2!@2D-$GHLn0j zAkfnj=$|dc_#~dH6*rK?l9mo~G?m%+P141GUkqnRGT0={XeYTnD2pP_&?;4E47jd^ zmO+D3SgtyQ{#@)&nXcZLZgh1#{H}Ql{C#n(4EX>4b$)sZ1R|d9oc(_P+TaU%I$xD| zY<~E2dw!8%YHF$mP?~mjJm4Q}_#hs~h8~}~I*YA?0v?W6SC11c9y%Ix8&1lV999>< zO%5IgI8u4`7&%f_oOm(ouHYhhLz>Ke1Q01+xwz=o)T%NY#U!SthT|)q)3`6~-wJ&O z1KsvRA~}Y~LYawW1=OC7?Fy<60thzd$`4S4RA~gA*ik z&(kJ>>SKa>QEL|rgZQN4s41jv$l^=R++6%FnQv)RLpY-x8#MTGImFGdxhg4w4L!Je zjpYAmFykx#K{D?@6(Dir<#oXT$P?@fqH6y4g8zlng`~6Izafx7k2=-=;OqE)rRrlE zB9qh1IjP=&;N9r5K@Jy^17tCO(J(ZNO(bjmzy#8n;jEQ@a;ES(igURKkLY~CG(7dn ziQ>Mx(q4daQZ&GMFV~@d!f3 zg60;BlPE?Bq~k&&!@F_~2^NwAR|+PW>j{lheTu5*ZT;qilAht;YKPSYnp#8V)a%q8AH zZcsiulAG#jUsR}kvu6r@$7t$m$2+T044ct9{mM5xQw+)O#@C=mzQ#k0=8T8AEflMJ z>^9)!{1NW#>dEX?eqYEj%gVe_ z5umnIIh6$=ebt)4k}WbOkvL)k=5Q{xekVM~VPf#Bx>_B<6uxrUh|02&+b92aK{Ezq zn={mpJPd9+zO}I*iJN9|Wc<;~Sa62a%AZlraD~^HrjTcr^$x3Kn`bz9aH$dG^V|Z` zvg7I>SocI;4Sy8pu3=LD^H#JX6g?c~`_m~@2HK3VY^2(_67{H>KFG&qBk8)>$gk2N zBnKVcj3oxIt|g`};#lH!8VyWe?Y)g2bzLRWa+|go{O(Sv!5?1Z(C>8nxhJtrGx4yv zDl9%J@aDnlLu>e@`@Hgr{N>caF)bL7V49SSh4+$ZN2i+xZlhibZxbl;-6boGN8VcW z-!z)dQ&?4dvPHc0TswaA`%PP9l1Q3bq{Bx$79@zH{&g{|M}Zb5Xfw1DL&;fQer`96 zby*i*Tpy7@;KyW^AfBX#9~2gfU5&m+cF9tn$Y+r@xv)z{po4s^up^rWA6Np6^Jqxz zYlm{NMD&4I*4i(^Fq}-Bm{^ce^ zuF*sBIqqFmNG`(R1})GfK+knJKYRFFhciM{pXK2vP zo-edJt}}$_!ebj69jDv-LjB|o^FX4|#kyjo3IP(cnQf`9sSR~V6lr37OUH5LCki)R zoG7ggc$E4-Xo3({3(EeXaeixY=H~gJOv%g=W$Bjd{G5Y-5Wa>R0IS*Vcaj&oMoQAx z9U_*W_*B!?0IscvhYn7bS;q_uA_dgR+o#!NV~mqD-CyYf=Zikbh7%NS3>h|W57Lzg zkOY4ttBt=}Qyo3(Y#~*FxH$cEtRNHF)EKSuHnmOlL_rV}xFcWp#!GWf2&g8#o;R1z zOfxg88OTCg=39sZLj6BCvKH*2AP9!|RtISG+=Kkf!Vx|L)7?aMXzHx`9B{`hR{8@J zgck@)1OZa1EQY1>w`$BPH=swMBan1e-<`=9t?w#Bz}X`SCX$TbMsinT3%#rUnn>_s zedd=IbOm!6TZ|2|8@GLooCKKR`N=R+&c3RK%;YkBQ3Ja1juFaZB4#GsCz?QAPj$v< zR!T3a*0>k*q6c&ibJ;R3>!-!ijd5O*rz_Y<>e7TQ$rInlP*r|*fIni8W;3qG(rxa?U8Ol27WZs_iV}*1v}LF7ab_ixOsiA`ZphcSuu3X+(5^S} ztpvB{pTcLm>THKa4tr5yM72YCjQb%H^v;PzdIax5N}?WoVuQ@ z60!rsSGu4L@DQ!NtIQHSUQ5u|`i#d5p@%aUq8j$i<2 zgRd63S{p-iwN2|t|&lX3lktty{Oqu)flP2^$>fJPl z>cj1SJ>n<8VFE_CpZ8YCTI;`#^ntE&bT$!P@H*>pJLE1yJqM_YG%8=(7f=K!8$zc! zIzJIzXw9-5ROYg}WJTb(;e5z21j@-{;TMO5{}@b8Fh;PAqE_JX6=CuT{v>0j@}Jr*t*3|+1ob29Q~i*f2Xk0yepj!aIBT{%ncEHEWJpS z7%5!Aj$JEx`{keDqysb+nGG7{wEsb&z5I%^JZH3QzzNwcw0W!BmX7QeXWnRyVcX?u z0G@G@U*cD17$uRiB$ZkMvq`V$6O0If1#)^?P{67D<)jr?=Rp)Q_dZXQ4VA ziI4v*z=d(<=Dwx+AmD_H*b#yRE)!8as*0{0e9@_2uG@FNccIb7qTM3Erb zaDhJB-?KKx%iQ;o{TPFU0b-9oH=q7PXY2hbUSa_Bu~`V;XCROh76|mWGy?fLad~+9 zIazyf`Z_zc>l(dV6(A0#oqnP_GnrvZv!zUq5s8mMUgxGGuhmm3aH4M~V@w^TyxZ_m z7;Ty@IoWHt3Rk7cy*P*H@d9G5FGLB8%ZO2xsx64|XNJ>aoI@YmYkEm&=`tZelidjTj~i z_~Q2ohP3GtYPTl=rw68IEL>*FFA0fW|IEJj5lbn@uiR^wi&iAJM%kqZWD`E`sv(B)BHGeuqXUf$|iD2Q-vAe zNVFvDKM^%a0k_q~;5XgY-!^i3WNkO4D}~4 z9P&KU)L&b2HBHWp7*fj84iX&TQL-A+Uur|qWS|gma)-ILiq0io^RGT=@y+oLOC8gX zqls9@%4k_vncGYa@$(1B#~#w%*+rxjSRF9xvX|pPjHaS2vc~HHh_FxlJy6=)Pv!H< zRY@Ea^5GRo?q3B!K(JOI?iuuVN2CPJEv~;T_T|*c-O`V}CZ#^v_O}uBj>+%GoH{V; zS0?=H%hKE^HUe`*ao?VCyK<4+omu@Qxw+3BJiQqKpEMG?FXxvgeV`N88*7n-4J$<| z-6c1|$vs~J&b=iAeQU+9nNy3+2C1qowxr^8+boKIwEB~$bR*qg=;^B;Zm1V0GA;)X zL?2{CAN)~ae?tAIXMq*>WhkZ#6$EN|0W*H}nu^Xfw%7X;3z)v!8%NoBnxPRg`(-QH zDA`f|sS{TCiW!ht5=7h__KQ?Ia5jcj9MT{zAFie(Obm}-l~y1Y8r-VyEd}azo^dqS zc%owo8#x>PJgZrmaIy_qYC>|Y%IOGtxU*Pv&o6-~-He*3Zgg~HsQEKJo|qG`z6);4 zcx!6t7Iaumnrsvx?6H*2s~*)4agD3CeJ5>uT#D z;DN=YwLfZBQIe%-8nstz%`)hmKvmU)qwGRz zDWE|1#W%gw3kkU~X=iHeV%_q==7oZ0wPwHNKmp*|F;{24ZsL7fay(bldE6p&E8jee zfY*J`V(Qy`WlZ|>uE%Tka-N)A_U~*&id=vQA7__OY@vUf#16b_nmRLqiMH?~g_T5^ z(>H#LB{OCIpRd33k5!%&4LiLr73xefGq^P;Q5f-kZ~2+er=1Txx|rK3=^Q4X6duS% z`6mhJ{VL<|Cr=Z5kIFb=aJ}!sS>w2KD2rr)d#@fZT1U)%Oosy7_6N@7WHLvWMqx+7 z*Ivui00T~F;^?@Bm?L!k#I(WXqf2a`tdL!OM5OKoS+|tQJoKf%c%(6=L}J1n#%hX} z+q?}r8p+P*57u?NnRD#;!%AebL5DmwPMP0CL%okKkStl4v%o4a%4&xq)N? z@wru!ZVU}qm^M)g`Rl`#ec`rT1t%f*gGE2dL!U>R;oPJ2xEZ#7XtQ~nB`!ncbHI=> z@@r=|U0~B1GNbepD3;It+u8N89KB+_yhQYy+oI*>Jtt;qksn}+|1e(~itk1EK`hPJ zWkX}k+%qsJ%ef3dS9Fx2`$9_y z{b3U!z<~y5FVmwQ;_>!q;x~v!`40)L(HBj+c~oKj(7@-Xag@A$oW5D@2OU zR3vTd{gJn%W0}r)`l(~S|GI6JD5vw${Ej{MP`V5>_EtKL2EPP2yzCPw8gwS}o1Zbi zeDe`KXT3jrUhj{-;(EbY7{Wu7SSvzm?6YY!4LbW|vW}G7r@Wu|#%JMFp~(t6yn%k5 zkI(fjp%ZWvYN>RpFb%Qa8I+xyb3r- zN;=dpWyB(0|Hg86s=QK7#4OD256kV(6y!ZUzniOegwZZ0#2xR0OkXB0cY0Tp06F2n zDL=a;587Of%CSELJpdA>E_k|Of_^dmjWPG~~4cW^=~09cP=@nxl-AlYdx5Jo#x{ zdyAnXPkHu85*l-#+%7z{ueRiYx5>_4y)qACFI)E~KO}Ey6PjX zizVEU71@3egIL8DUs*?QA+k8TE_&)h8jDm+;Ha7qo$ zjES2ymMR7{DUp6Kf0Hj9TScMFs;9-u_E~4fU7KHnMi=H@QE2C<;4in&QIpGuBYNMY zL!mLoJz?%B_BzBF?v*6Hwpc4!ZalZqbOEs;qDvt!2%~dc^-E<@S>@)4W)rnrx3R-~ znXWQ77bD}0icQ-A%GsJG)e;=8+hL^uktS zj{DlWjsBB;A+7YUXGR|{rS;UHBT6W4WnNa5#O%Ta+=cAA%uJU0wg>MMU;$%~!ItW6 zZd;65WOKGVg1M3BoQPFlrxUeUF9{Qx58G8H{HvS^dZxw{>$hMk^qX37t&@5`oh)7U zTbtT*@sDj{4_>04)#8r3dlE2i9uioJ7=AqumPb@xxjUjBEdG^2AMfOmO$tFN?zTiZS%l1!=|KcMrT8 zqfX!KiY_JVHAYfVcjx=L1*Ky4L7lf&7SSrXdSpY3sEJ<58=d0zEk|>({7l}QmNH(_ zb)!{k>xqng*NLPu=NSW#_;R-Hx1bK%&=oLf#vs{yHywdA%}OOhukm0Jn-VqX6>9_7 za31&aSz48YLo%Q7v;tD}oA0UNb@o|BnVw+j;INH!buN<%x3X0OOi9^Ss2*)oT=<>C zXDt{3=ArlBu6y4^MC-2owkCW0isA=g+`Z>z{VMK{G0ehf8AL0>{KNUzS&QMPuo9~m zM1*tMByesK%Vr;1=d}8J=h;U|YTCzi1$&j*T3xHb*_4^XC|~5u)+s>#9Q!}XW0cPT z?SF=>EOVeaVTKlA#BLR6fi7NCaV8my#1>SdkIq( zrKS3pLV`fV|Dt~-0VbH)s~4~wQ8r}e*RTL~CfLbeQHmW#E+$O%pM-`C0{Q)Apa1vR yEIZ6aOcHsW3sx)k`oBW~wkbw}3- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + + // Get 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: @@ -13727,6 +13746,19 @@ console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); }); } +'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 + + await Word.run(async (context) => { + const properties = 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#add:member(1)': - >- // Link to full sample: @@ -13814,6 +13846,19 @@ } } }); +'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 + + await Word.run(async (context) => { + const properties = 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.EventType:enum': - >- // Link to full sample: @@ -13940,6 +13985,40 @@ .getHeader(Word.HeaderFooterType.primary) .insertParagraph("This is a primary header.", "End"); + await context.sync(); + }); +'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 + + // Get 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.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)': @@ -13961,6 +14040,44 @@ await context.sync(); console.log(base64.value); }); +'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 + + // Get 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.InlinePictureCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + + // Get 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.InsertLocation:enum': - >- // Link to full sample: @@ -14131,6 +14248,21 @@ console.log(sentencesToTheEndOfParagraph.items[i].text); } }); +'Word.Paragraph#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 + + // 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.Paragraph#insertBreak:member(1)': - >- // Link to full sample: @@ -14562,27 +14694,6 @@ await context.sync(); console.log("All settings deleted"); }); -'Word.SettingCollection#items:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml - - // Get all custom settings this add-in set on this document. - - await Word.run(async (context) => { - const settings = context.document.settings; - settings.load("items"); - await context.sync(); - - if (settings.items.length == 0) { - console.log("There are no settings"); - } else { - console.log("All settings:"); - for (let i = 0; i < settings.items.length; i++) { - console.log(settings.items[i]); - } - } - }); 'Word.SettingCollection#add:member(1)': - >- // Link to full sample: @@ -14612,6 +14723,27 @@ console.log("Setting added or edited:"); console.log(setting); }); +'Word.SettingCollection#items:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml + + // Get all custom settings this add-in set on this document. + + await Word.run(async (context) => { + const settings = context.document.settings; + settings.load("items"); + await context.sync(); + + if (settings.items.length == 0) { + console.log("There are no settings"); + } else { + console.log("All settings:"); + for (let i = 0; i < settings.items.length; i++) { + console.log(settings.items[i]); + } + } + }); 'Word.Style:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 6622ffc88..3d8d22f56 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -26,5 +26,6 @@ "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml" + "word-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.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" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 0e2f8f1df..ec4504317 100644 --- a/view/word.json +++ b/view/word.json @@ -26,5 +26,6 @@ "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-settings.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml" + "word-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.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" } \ No newline at end of file From 610e8f6bd90d73b896ff2b5fb6bc235959471b28 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 14 Oct 2022 13:25:05 -0700 Subject: [PATCH 121/336] [Word] Add manage-custom-xml-part snippet (#713) * [Word] Add manage-custom-xml-part snippet * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback * [Word] Additional mappings for a couple of enums (#715) * Reset metadata file * Re-add metadata Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 11 + playlists/word.yaml | 11 + .../50-document/manage-custom-xml-part.yaml | 217 ++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 16031 -> 16328 bytes snippet-extractor-output/snippets.yaml | 233 ++++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 474 insertions(+) create mode 100644 samples/word/50-document/manage-custom-xml-part.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 833941991..61a971fa8 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -235,6 +235,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-custom-xml-part + name: Manage a CustomXmlPart + fileName: manage-custom-xml-part.yaml + description: >- + This sample shows how to add, query, edit, and delete a custom XML part in a + document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 227c06395..795a03103 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -235,6 +235,17 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-custom-xml-part + name: Manage a CustomXmlPart + fileName: manage-custom-xml-part.yaml + description: >- + This sample shows how to add, query, edit, and delete a custom XML part in a + document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-custom-xml-part.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml new file mode 100644 index 000000000..175d90f7b --- /dev/null +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -0,0 +1,217 @@ +order: 7 +id: word-document-manage-custom-xml-part +name: Manage a CustomXmlPart +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' +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)); + + async function addCustomXmlPart() { + // Add 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(); + }); + } + + async function query() { + // Query a custom XML part for elements matching the search terms. + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").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" + }); + + 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("No custom XML part to query"); + } + }); + } + + async function insertAttribute() { + // Insert an attribute into a custom XML part. + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").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("/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("No custom XML part to insert attribute into"); + } + }); + } + + async function insertElement() { + // Insert an element into a custom XML part. + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").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( + "/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("No custom XML part to insert element into"); + } + }); + } + + async function deleteCustomXmlPart() { + // Delete a custom XML part. + await Word.run(async (context) => { + const settings = context.document.settings; + 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("No custom XML part to delete"); + } + }); + } + + function addLineBreaksToXML(xmlBlob: string): string { + const replaceValue = new RegExp(">"); + return xmlBlob.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 add, query, 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

+ + + + + +
+ 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 7e8dc1cf05ef2a73ce945f8c2908991073dae3a6..bd8d25cf43d3e420a7a313f0a24608dff5985ba1 100644 GIT binary patch delta 8401 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 delta 8180 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Add 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml + + // Insert an attribute into a custom XML part. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").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("/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("No custom XML part to insert attribute into"); + } + }); +'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.yaml + + // Insert an element into a custom XML part. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").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( + "/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("No custom XML part to insert element into"); + } + }); +'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.yaml + + // Query a custom XML part for elements matching the search terms. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").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" + }); + + 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("No custom XML part to query"); + } + }); +'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 + + // Add 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.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.yaml + + // Add 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.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.yaml + + // Query a custom XML part for elements matching the search terms. + + await Word.run(async (context) => { + const settings = context.document.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").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" + }); + + 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("No custom XML part to query"); + } + }); 'Word.Document#changeTrackingMode:member': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 3d8d22f56..801c4d178 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -24,6 +24,7 @@ "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", "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.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-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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", diff --git a/view/word.json b/view/word.json index ec4504317..fbac9597e 100644 --- a/view/word.json +++ b/view/word.json @@ -24,6 +24,7 @@ "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", "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-settings.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-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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml", From fbfbc707c5320a9f71d09dca2ddc0947761dc14c Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 17 Oct 2022 11:11:43 -0700 Subject: [PATCH 122/336] [Outlook] (OWAView) Update snippet to include new value (#717) * Update snippet * Apply suggestions from code review Co-authored-by: Elizabeth Samuel Co-authored-by: Elizabeth Samuel --- .../get-diagnostic-information.yaml | 13 ++++++++----- snippet-extractor-output/snippets.yaml | 15 +++++++++------ 2 files changed, 17 insertions(+), 11 deletions(-) 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 5f6753438..a696e9d85 100644 --- a/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml +++ b/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml @@ -10,17 +10,20 @@ script: $("#get-diagnostics").click(getDiagnostics); function getDiagnostics() { - // This snippet gets a mailbox's diagnostic information, such as host application and version, and prints it to the console. + // This function gets a mailbox's diagnostic information, such as Outlook client and version, and logs it to the console. const diagnostics = Office.context.mailbox.diagnostics; - console.log(`Host application: ${diagnostics.hostName}`); - console.log(`Host version: ${diagnostics.hostVersion}`); + console.log(`Client application: ${diagnostics.hostName}`); + console.log(`Client version: ${diagnostics.hostVersion}`); switch (diagnostics.OWAView) { case undefined: - console.log("Current view (Outlook on the web only): Not applicable. Host application is an Outlook desktop client."); + console.log("Current view (Outlook on the web only): Not applicable. An Outlook desktop client is in use."); + break; + case Office.MailboxEnums.OWAView.OneColumnNarrow: + console.log("Current view (Outlook on the web only): Viewed from an older generation mobile phone"); break; case Office.MailboxEnums.OWAView.OneColumn: - console.log("Current view (Outlook on the web only): Viewed from a mobile phone"); + console.log("Current view (Outlook on the web only): Viewed from a newer generation mobile phone"); break; case Office.MailboxEnums.OWAView.TwoColumns: console.log("Current view (Outlook on the web only): Viewed from a tablet"); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 9bfed5be9..11dd7e90d 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10605,22 +10605,25 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml - // This snippet gets a mailbox's diagnostic information, such as host - application and version, and prints it to the console. + // This snippet gets a mailbox's diagnostic information, such as Outlook + client and version, and logs it to the console. const diagnostics = Office.context.mailbox.diagnostics; - console.log(`Host application: ${diagnostics.hostName}`); + console.log(`Outlook client: ${diagnostics.hostName}`); - console.log(`Host version: ${diagnostics.hostVersion}`); + console.log(`Client version: ${diagnostics.hostVersion}`); switch (diagnostics.OWAView) { case undefined: - console.log("Current view (Outlook on the web only): Not applicable. Host application is an Outlook desktop client."); + console.log("Current view (Outlook on the web only): Not applicable. An Outlook desktop client is in use."); + break; + case Office.MailboxEnums.OWAView.OneColumnNarrow: + console.log("Current view (Outlook on the web only): Viewed from an older generation mobile phone"); break; case Office.MailboxEnums.OWAView.OneColumn: - console.log("Current view (Outlook on the web only): Viewed from a mobile phone"); + console.log("Current view (Outlook on the web only): Viewed from a newer generation mobile phone"); break; case Office.MailboxEnums.OWAView.TwoColumns: console.log("Current view (Outlook on the web only): Viewed from a tablet"); From 846aa1c51720c4143a563595476764793c22e745 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 17 Oct 2022 13:22:58 -0700 Subject: [PATCH 123/336] [Admin] Run yarn start (#718) --- snippet-extractor-output/snippets.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 11dd7e90d..c03a3b05c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10605,12 +10605,12 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml - // This snippet gets a mailbox's diagnostic information, such as Outlook - client and version, and logs it to the console. + // This function gets a mailbox's diagnostic information, such as Outlook + client and version, and logs it to the console. const diagnostics = Office.context.mailbox.diagnostics; - console.log(`Outlook client: ${diagnostics.hostName}`); + console.log(`Client application: ${diagnostics.hostName}`); console.log(`Client version: ${diagnostics.hostVersion}`); From aa8a8d2a85ebb88890752a849464645014fb6432 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 18 Oct 2022 15:16:07 -0700 Subject: [PATCH 124/336] [Word] Update existing sample to show BodyType (#719) * [Word] Update existing sample to show BodyType * Apply suggestions from code review Co-authored-by: Alison McKay * Update based on feedback Co-authored-by: Alison McKay --- playlists-prod/word.yaml | 2 +- playlists/word.yaml | 2 +- .../word/50-document/manage-footnotes.yaml | 15 ++-- snippet-extractor-metadata/word.xlsx | Bin 16328 -> 16390 bytes snippet-extractor-output/snippets.yaml | 74 ++++++++++++++++-- 5 files changed, 78 insertions(+), 15 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 61a971fa8..9d18ede10 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -205,7 +205,7 @@ api_set: WordApi: '1.4' - id: word-document-manage-footnotes - name: Footnotes + name: Manage footnotes fileName: manage-footnotes.yaml description: >- This sample shows how to perform basic footnote operations, including diff --git a/playlists/word.yaml b/playlists/word.yaml index 795a03103..689674e30 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -205,7 +205,7 @@ api_set: WordApi: '1.4' - id: word-document-manage-footnotes - name: Footnotes + name: Manage footnotes fileName: manage-footnotes.yaml description: >- This sample shows how to perform basic footnote operations, including diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 40ebbd426..cb1a12502 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,6 +1,6 @@ order: 4 id: word-document-manage-footnotes -name: Footnotes +name: Manage footnotes description: 'This sample shows how to perform basic footnote operations, including insert, get, and delete.' host: WORD api_set: @@ -48,16 +48,21 @@ script: }); } async function getFootnoteType() { - // Get the referenced note's type, which is footnote. + // Get the referenced note's item type and body type, which are both "Footnote". await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items/type"); + footnotes.load("items"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - const itemType = footnotes.items[mark].type; - console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); + const item = footnotes.items[mark]; + console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); + + item.body.load("type"); + await context.sync(); + + console.log(`Body type of note: ${item.body.type}`); }); } async function getFootnoteBody() { diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index bd8d25cf43d3e420a7a313f0a24608dff5985ba1..f35dadcdba1b8ee7b7912c0f8592f37016c513b7 100644 GIT binary patch delta 6831 zcmY*;1x(z*_Vq5si!H9jS){lZhXq=^1-1o>`{G{ohg!K0-06Zo%K*S26z z9J|95gPUf(`%zCn8uSA=$`(nW{ctRXOsE)0DbY(@y}^^Z7WdepGIZCrK1$X4ILXF9 zMy^vf3>!XBjr3d6pJOy*Q$6^SoNK}MiYJ5%YWO?qTGl>0cvcsrQA$jrD;%-$t;~o- zn=IE@@Y6IP3)kv^+fz@yR°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

?BBp;mVFEP)0SV9}s zTb7*~Bp4s$IGt5u?b>eTl0=bj^<9#Fg<)Q;^@YQvdvAu(AyfALWIC`}Tg`$&R)$&V z)`s}J`wyP`w>$Jef@1C6lvWYEri45;oenrl=vJ)PgKc5WZm2VTOkx@ec+#>~TqRlx z4H%IoxWSo>`>qFD#F}MPOVqoJmSwTWhhJ-<)kgPt;-OJ7Sw`fQfG^WYA#PLH+Iza+mZmO7E^+VNURB4GrYo1PBAPJ7e7zqYJW{5c zu=?4(1?|2Z_+<~-PDu|OaV!PM_QNxh#qO=$`4=cw>j68^M-EG=7C&EJn?{X^HwE5X z6@|Z>8&lQ1m>&;}A@7&(-FaJn)ve!->vJ=GzjEHL;I{Om=UNW1ah34qY08iY{IYmX z`YtPpP#?oyhdaq;HT&<F#u=DRKY#goi6eI%j#s@fPlhgyM>uLs+FtX%}J zHXHmQnzA;}qq$uxH`(}?n-QO|a<%4OZg9CCyV7rBZ1}~CMH>WG299gOd!5x2*Ma06 zaMz{BVtdy}Kog%fV(FbH#|zk&mz?#(GfgR}U2K3cRxpMA^YU-`kmD*d$%##(e3M?` z#YhC&qLxmf_;a22i<1IV34F({El?%1ufA~6Cth7r=Yv$Xsds|E%1B$>nueCP^QsNc zU*^TQan&W(0o73sbu5JVBoo2p@%$Lx(}fn=;yyRG6Sb`URo*q9N}`x0?yYBj+%IxA z>>mM-QEm;gE@sQg&9OC8t#>l!OBIlx=*lHd*(YT>W_D2dLXJ;er_rbb?P1z<%o`*P zneSFk7hxQFcb8~NL;?uWlcMIf7i?u>!QD@+Nk(dIGFFQc;wz*Df4m2E-s0Lxmd2${ zG1h-6;B|rz8y&ygJ0lX@_panvgg2(F$%+8QD%4%IvXe`X^84Mp4YMDEgM^-2u?oh5 zsVC*%nC0G?h9{li{{0qHrJ_ToXV+j%!28Sl1F2?~=ukUK8Wv-zy8d;$*1v$f^+yA6IZ@wIlgI~Et1 z7YyT%PJrYZeTXZ~r&K$`0{`=+!_`b%ut1Vb1}#LYn4 zaHIGoO%v7K4k=DDKC)@uk7Z)HmW0(lxIwZN2f|iIm8Siv>M*39#&LywQiAb>el5y4 zi%vw1|JreSP-()_Y8}rGm0#yq_WdY;-fRoi?R$uI9XLN%U$a#ymJIfjSa3>B3)sGU zhKBv;tz*Oyy*7gGQ)Z`eEOYvT$D|`Uu3qq_Em@b@cjS8S1|p> zW0kkZ@U)s)*=@>F!g=dTlw6_n!iX;Jgq?qtgPlhY%!jd`+V8^V@LKl+Gdf;(AcFQA zw$qX{HD8(*Z}Nzu%Zl=w-(FGT`6xbd{mx|1Uxe8p>F&HA6K!+zq^3 zWF{v(_Jr0bg5D8rocXKK8NNzh3)y#Ya*4G^Z`SW&Go|DsGflG~GjKihQj7ey7S-!=Xwam0=UnIS3(biIB-3zLhR|(oO zjvu7-=|xsCBvF_%HL?~xug#=8e9K$`Jdc4{>51|VWm;82L#Zp0WgexG@bBV1fr_zV z=I^^cKdzK_hGs~8@X_PKnbGw5_oOeVe6Gw`t!n4$ke28Ql%NjL1HJLRyq}MzOfFd>!AL9$)cpB$kMie?IQBWPjh&DO|A(#oTubEDB|0~lA$cVq>_11AO07gn<5Z9gy>Y)F>ADp-1 z?@;NmK_H|QHYJi&l7RYu+BgVA{!iijU(>`vI^s|wF(lYgB&d;e)FjB)66`q5j3Ce_ zTW%LuPg`?js{{$v|M&n1MEt+q|13jfg@g>a2YDi)0bWDONWS_n?npqA6vdevsm@J` zESF>l`ygi}UsC-ScrXZrKmmau|6i1BB(0Pr3ZoFxP)ZziP2^wcZ6ZXZ8p>$@I0y)Y O|F54s`)7#%XZC;SN!#)O delta 6764 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 Count: " + length); }); }); +'Word.Body#type:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + // Get the referenced note's item type and body type, which are both + "Footnote". + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + const mark = (referenceNumber as number) - 1; + const item = footnotes.items[mark]; + console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); + + item.body.load("type"); + await context.sync(); + + console.log(`Body type of note: ${item.body.type}`); + }); +'Word.BodyType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml + + // Get the referenced note's item type and body type, which are both + "Footnote". + + await Word.run(async (context) => { + const footnotes = context.document.body.footnotes; + footnotes.load("items"); + await context.sync(); + + const referenceNumber = $("#input-reference").val(); + const mark = (referenceNumber as number) - 1; + const item = footnotes.items[mark]; + console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); + + item.body.load("type"); + await context.sync(); + + console.log(`Body type of note: ${item.body.type}`); + }); 'Word.BreakType:enum': - >- // Link to full sample: @@ -14412,17 +14458,23 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the referenced note's type, which is footnote. + // Get the referenced note's item type and body type, which are both + "Footnote". await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items/type"); + footnotes.load("items"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - const itemType = footnotes.items[mark].type; - console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); + const item = footnotes.items[mark]; + console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); + + item.body.load("type"); + await context.sync(); + + console.log(`Body type of note: ${item.body.type}`); }); 'Word.NoteItemCollection#getFirst:member(1)': - >- @@ -14442,17 +14494,23 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the referenced note's type, which is footnote. + // Get the referenced note's item type and body type, which are both + "Footnote". await Word.run(async (context) => { const footnotes = context.document.body.footnotes; - footnotes.load("items/type"); + footnotes.load("items"); await context.sync(); const referenceNumber = $("#input-reference").val(); const mark = (referenceNumber as number) - 1; - const itemType = footnotes.items[mark].type; - console.log(`Note type of footnote ${referenceNumber}: ${itemType}`); + const item = footnotes.items[mark]; + console.log(`Note type of footnote ${referenceNumber}: ${item.type}`); + + item.body.load("type"); + await context.sync(); + + console.log(`Body type of note: ${item.body.type}`); }); 'Word.Paragraph#getRange:member(1)': - >- From 69979bab364f8defe304eb702882f4c9e7711d8d Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 18 Oct 2022 16:08:24 -0700 Subject: [PATCH 125/336] [Word] Fix mapping to ParagraphCollection.getLast (#724) --- snippet-extractor-metadata/word.xlsx | Bin 16390 -> 16414 bytes snippet-extractor-output/snippets.yaml | 30 ++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index f35dadcdba1b8ee7b7912c0f8592f37016c513b7..4b0e8a8257c99bd9486b50b6fee84e325975d450 100644 GIT binary patch delta 6655 zcmY+JWmFVUw}$DiA*7M+PNl)2We8#D9J*7Ga6oG47?(UG1?rsFG-=FW^ zdw!j@-gmF_m)xsTp~Oo+c&?cbm!x9qRPC5OheK*E>W4j#hwEW0zO5S-SUEaUovP+HZ<62j zLpWe9Zw4xGh&7bQN|C9H=IY2tLAcSmW?Yf)4R)&Gq4u54ZsqLx@kR(cHp zRwp^+R^qG{A(szHqv&ZhI#XvwmLS8}Og#ekB}u2yH#4=(s`#SZkziu@ zoS_v6>5+|p*R(9>Lt2tflAhL}K_vJv?2SRr1enKDouK{d1R7;lXDZ-MY%X6^rZJg( z0DE~G*b-}%ZSpUP7`Zx|qiOXcWZ$sX{`16;RS6KRk^=IqFv!UzO0^tcbsnhCXlOwz zJ&ad@9qkuqxqe5l${eH~^bwZm$d(0<&DHW;(RD(N^@F!aq2b0}JQV1DE;c=O_Yj zxh(9ZgALu%U{C^P*Vy|tdog_&NrNOb|NN-sxhms@3gdTlBE;od%GUq-6r)@~+&^E27JL)+-U>7w z{V`V@#=CGTkY-|VUv9(FFRV<-0h!ku4hGYoXBq4P={`;+#!F4a_OA}~;=1k^d`{<` z=52KKu<|qiD>y3<%G*~&t^1U{3TBu2PKEz(cGD^u%I0o-pNB+ z!;2$?f=z4YanwzSg!CEifX4v+9k;|!6n@HeP0PI&!JH5pf>nwX-K5P2UZJaq6=Hbh zp0#8X3=X^njaU>H5gA7E#|gcN3FVyMS+H?k;4ES3778DsCCiTL@*e1_wg;N{qN>JN zdyjGIzEiz5-|ODmj5r7H*Kr_o%gH-y8yfzO30ONLW)`BIm5nvS`N0CMxhv6Yvlp&f zjsJK&iwo~3u zJ{DaA^Jkn(7;WF0PSv0sG2>+?)Md9IeUI?E{vS%ziG^3U^b`dColYm#D=ur%50@Ef z)&^VZg(3Wdbi47>zIPFzzQzuM23-KYf@+OhEmjEKH5)`sZVlaOv^P_~J|Gz97kUh_ z_7uUMcCq*2U8oVVAT=0uv0Zq|QJ^b)0F4L{{cJt}j z0Dqh1D>5PG1tUyxpXTq8-f9+xV9m;y;2%?6-j1UiS7`KdFUNkGV~+UZ%=xI`EEBAs z;@qc&Y2mV^c>kFoe3Q0gNc=?qS4l$f3lOJectLjX8K z%`*n48gbm81|TumjZ7B{Me`fFHGHg{eR?|$qOBE%gbw#Vowm1mUtZii%r`X5zg~Rs zcW$-&t(!7a-&$YZx9{(Kn0u@ME{Ys>GYf<{>{q}(yKZ9C+hpC$MoJ00+oHs1GkYs~U+2nGcLaun{k)#U- z-}va(q@me!S~FH?n=3KLz?%btk-%7qRng$$fdJux5th+q2$8p|8v*6r< zC;}T1zxg<^8mEJ5e7Y5uJlqrWh{!vK@y?;9%%L_eN3jg_-GY(d0zRc~hw@ZP9e&*2 zv&q>zeQUk>-FtuJ?NOT7Pm8q~aZGDI`|-8YRFF4^62D(dkTwB6Vl5nYF5z_+;Z%xJ zK&GJUjt0^%3{R11O%r92vo4A~!5H3O4N+}qwN zoGKq-?gNw!d>82j;9xY5&lJ>K+GXH^dfR^w=lr6{l>5A1xhcRXDsJX%ciCH}t7pAR zZ`imoA#E}KeRM^D+&&4gICHw3j+L*O=CU-`X$-qI)DPvRzk*&G|P4Z6w7QZiep=NZIYoJ_y$GknD_PD@+<{hF;c9&S@U_5K z65D+miO}f6kh}Z^>~qXL&mN{EySw*&;lZ!CP;mDKooss*5u&5Hna`HC{9iJt8+#b? za?y^$Bs2_)qK#W z^M5Vi>G%`{EA1rLvlNBU`F}NE|9c<#R#B3Zk2yBoW-KDZE)vO3PSq<47Ai!sqGkdiJh?o;L%F@VIV_N@Ys=1P< zn{7x?N&nsdzfz;DGE6|Anfojcpq_7CvfAF0cRt!$Ca>Q2ZwE zRS#Spqw6Dmj;Q}`zHc6nTpWr;;{cts7(HW&`;~5fdbyLJ+-H{biikre4W)i%Sq2!J z%VNVSNQ8i-A7)Him7fadlhPRJpjOD9#a>kRUd)63)i$ZG;^6s*2Gb1!$qT12omCYAJ;ZhA`HDll&-htl$XL9;pqo7NQO>)l>N`wRyMndi&$ zm&bOIYK5VE?2@{#PPEt>tP4_A4I&F!Hp955OvHQ8QM8JJ$s+srL{?Kf@iI$I3@l7W zw5|BOYA-e}WYucWURz;;Ngl(MkiGJ|TD%%{H=gAe2l?tfGu5!tp;W7>ZJZeTAk zfxM`R*-%DU%WieJ)U!yt>1^AKr04)Xa3~$84T3AECLK@vr_fSeOVA#fbKYVVK9-$R zog8pM{WF2)$gZ<2v6m=*GOaGI|9vmMA2jbeT(QqTYTymBzg)av1>%Uo!_S;{{GVtv zhh-<=*%NDCl0H$%1k_m$rIeUC$E#fk$-yg`ySj*0%VB;g%VUT$^sz03WvQ(Ty;YK( zjdUIQV=Pp#14^dadQkhRI)vhrO6G)r10dx0gXypk4hOWOw+Jd5fG4!raz3Hq)fyUW2p-FF#5&PRfK9A;<4Dhw< zp&Q3qZ5nCMO4RKg{AG<74o53_K(Hl4hWxf?s3xSrb69JpX&&O}n{;HcuE|GR($o}}UI@H2QT42%hoP!y| z?x>$r$KXDq_ugWlb`WhM)HRxKt;cDb`pnjF)OdRE^W8dcU&xDtnHx*`90H^U?8RO< zgeGO9KC^czHe0B8JKV^KR~3>sY^)a@FTD9=%*Y7(*DRC1qdpf^B)pKk>z5Iiecob- zJvt)RaznYfgQL-&DWzENo=VLYFTU)V|Mc;Q4#}^dHKOgI}zZ_QQ zYvW*=tVsbUOW5XtHRQ=Y7X~v51hCmi#Jb*yDqs{R{Dit<9HaNxcx)h7Ph4@t@;p#Y zx})4Q(RydKN~h4-vPr|P3tulGF|S}$9_;iNeQc}UxrQYf1+uW&kf2SV0FQJLW&P-f z8xi$LoNrs+rAZaNvOC_MgQfn<8q}icTy)rS&3>cKkJMDIzI?_vxCu_COesGVd$NM0 z9@uw+q@mOP;L#uABKIVOZ_xB}D(co1u9goD|1rTw4%NA3xWMwY+{2QU!aCL4@tZ-- zeelXK#Hfc=lT?u)4W{L+J0TGbIHa|GvABvv9nrDX9BucD+IbE5gy6gA37C39vuy9F zCx377pu!Eb5M3pFOyY*ZPHlH17)GOr${kXpPvZFB)- zu$lACX~pWA#SD~vO%D+PM7S;Fl-PT9*-h6`ez$8_Wmsd>*65&fP4*i=m>)5JJ($Vd zs`<%^DOQG6;N9&Iy(fw6|5t050h(+-Ytr6N^Up9ePX?(Q_)Tqt_F=_nrdulSLey*< z8cE4Zy7bshsbkW>-mc>u9jwtqiy@6FvUU6l;PWqqa@ZRVSi&SXjt38NO3ZH>-i&`U z5BV$Xt|O9ratbT@4a@x^q>oXpcV9`Vb1Ob+v2cin_Pc4L`5=!otbAXIbVX6yP5ED^ zlEx7#J-Y1nO=_ZWj1sj~k}G$eHDO$WR;caOsM(OBtDggBNq#+T%zO@t8nf6I|10cR zQEd2V=sMz+2J29>vnBTR6^a#JQ2VH%BSIYawPdx|Rj^>_U=c;yYs^FhLeF^J6kU0p zw8CkO*!@QTn6rm$$@pSl?iliQC3$F-D_?fh2BzG8vf(HLi6CsEmKgCJba5oWHzP|? z&6@O=dPYRPpw|4L9>B#;=KHZNfq{g?1OLdz166-rMa!-lgH=V_t&O-*K8~w(`n8q1 zwKUm&ny{S0}-(;zl4Z)2pT;}ct{fH*6cPVCn(q`A6 z^mnT)W^odnP%*U*?w;l`%E2U^U-Q7Ngc8i86l))*4jH-gan4h#9%8soxwmk zq(Db)_O9CSYHnZD2NB=*d9)@*e6Ddqd+NDYux&0=SyJaci6wB1=12vRse69*=TKuj zkNw@1)wvF(n%~`Yh5LP@QRu<(Gc?A#Uf$D+Ky6iN(P2HXQn1#sr=l~-VVOYJkIqygY21eS6Z6riJ|Ur-jUiEyR>#wZaETMh{o8tBst zSy){c54TiV`wiE3=`ZKcfV)}8kJIn@tJp&5%ym1s!GwRzw+pg4&kL8Xz7VkM6hZ-YbaWm{NlTg+!tfxm&=!0ReF zI3#%CwLzhRG?;l~98+TVV#a6BrDvRng8MbAcW06k%G6qzLhDJ&x1N=#E&^UY zEKq+aA^c`G{*lJdCihc7Zul1oQe#HR@2dD{m2l66cab|cw6ipd-SdTmbH9}djzyFQ z#%cA`OeqP$iteX$gsf;(5!XpJ$<6uwuIgouVJ-u$3Oq1WafqpTMWjS`2j=xb_KFBP|R-kAY z=a=fp4`M4SHu?rWmA|&iDYUUHIH%fmEVnsRULF1T#whsHX(aTun_KFga3UeAnVBF? zbH6iae7b+8YIpf)>?qC9b2Yf12HM-7$~~+5)naSt_|k%ct-v2OI8-mgqAd@lhK&AF zj`qVR-fa;T+)`k7r@rP{aEV(5HS8TLoU`xZ-tNSYV_z>mF+wMZP}|_dvJ>K|UXH)9 zO@;UN6U9WheJ@n;FJ}yB&lM*&;_-11Q7~S_{i(RW3{qoQ@t0YTY$DBy_r}i9o84~* z!%o?m+q8b8i0*VyrzSgX)!6M|zu60M79&?2>E5WsmcU0ld?xQL^xm-;9Ftb*_|0#{ z_J^dXv%@?@IDK=N0Tg{FpXx$1(O&!S0jKRoO&`A`E(;}8_@#8jy82!Ek2Q-(GzhnP zOa+Vw5a&^9pYlV~?@7{?bJLeGVOUtll(tkA|0daZc`_Ij{;0qIOmmV7kex2?R(q{Z zY$kI01zoBt4ydE4;&eRL&ay{e1%-8-q? zFBEZI#bSIAk#X8K8>feWp}4JE;vxpp7b5;eTHJv9cD0=P5D8^kE*ljku^-&7Cq?9j180$2HC#FYfE8MYwgFxd@5|&r!AH9q<7HR)4gM#;J2T59(oklC!7`RUlFUA)4a$k#w!gH!eDDq) zvKj$V1C0MOD}hUb(3o+Mkl@ldRPYx`BAWkxK-(c9Q6T-_rH2Q1#iN3UOA*1!3vO!Q=Q|!4IW5 vk(1%CWVosSLsK0Y3CZE#7zgnGf*ar_GSbKr@GKdrf5A&KtQZuM|1taz{+Emy delta 6620 zcmYj$WmMFU^EHdK)Y2gxOGvjgETA+3tAKPb-I5==dugOgx=|36?(S}oSfoP%dHg;v z{^vJu=bk%r&Yd$eXC^lg6dnkw)4{}+u(TMdMnyrHMHpgI01i&syo7(HY@a~C#ryV! z@)J3n<`_M+n>|kkhS4GKL9zA-LfywxaYS;>NP2}q%H|!u^sR)~PikXNUE7lkoe#6@ zjN}x0RpZd{W3}jjHNzz)3wE{RPici#?5}vkxFN$MOWxRU9g?Z2i}Nbb^ubXfVhYb$5cv$FK6t z&N*QfA6dhQ?EFEK<4ISU0l_qK>m~W(6I}y|eo75AfQXPpeexDWFAP$3h8MdDC^Ajz z``0ojwrdokLmauYVi(#iZU^R@ZDtYC4H?E9R%#Wv5iD1 zl2F7D+Tt6ppPL9FM3PT!JOjmpsyf^ab`w@EX|55+eCGR|a@etQ95b(HY^?1y8XQaw8TK)Z}eeHUKSqtp8^Y{Z& z+kzNZd+RLV+i4Dg!~%NpoZGX5+@cfeoorMJfOtVf@$+}nw8EdiUt(>WfR-N@n`N8q zG=@GcYLYk!v$zndl}R%FBv5{QK!HEP=lsWB0xd$Lpb6x088=9yd>eLoYyojH{{9W-a{$sE10g$W)EFYL?I^NfpUiynE!3A zXs4zYgW%iboyEUDF6nrR%0gZa;x~aSRBa}2*n^TQRZ}WM1Mb`Gui5$1QYkrgu(2hB z3p92T=oEcRM6B>ku!)orlg-U@lb5*0Ar__89BeMk@AUa&fFC}4naa;bKD{P0I=HWg zWU|@HQyeK#a7>^_v~C+D1?htRUh?TiKiewgV>Qkn!2q$;+UpoAL=CsKdz_2#|M93N`fhVrz zv`Nk3msgVS3z&vE)s2gro}ntK(DYKKNrjn8BB2+zii~me~mO5b-`wzE?Q_XU3!xbscCK<1a%o~3h?GoYZ zUTfqlj2*8Mu5~iQ5jSRl(k%sya~;Ae^n?mRse7 z^xn}4n&R|xYgBq+220VP?NA1{WA+_PMDZC#om#|bpvFRE$(sqRj&ph`G`8_`bMMV2 zxNeM55Z(BKIJ)EpFB{&FWzXIv6F`C8oxiun8*Sd+zK_Q%E5`};j~y*WO(zw~@D-yK z*v?gl@J-uhbqikKjSmF2cn$LOvhQ;gLZ*0R;bL0Ss48rfkQp1pN8wZl;fan}Vr2}S zhw&bwbMvNxhNaO)sy~oKB)9aFmg~BiL$3DTI+DT|i);1x;^!&b-%J9Tf`AO=Qw^-5 z`?|Tuwio_s;iGsAmteit#Wla(WAk+`AF)k)-?)g2u8FX1-|GFG z5tyVoCM4H@^kVlC0df@Q5o*_8DJexlaR+#{dec$P#pfBgbJZh>BU%22@@^AktGr;C zgMN;z1#Np($+x$3AHWnY&~I* zC5(h$L{sQqbv;nO=AR~(hH91@smsDbyREI$?RP){+GXXA6+A5smpNvXQ|Md|e7oNjt!_w_S9?mnzUjrSN7uVvDbNLTQ>Ms+~MUje<%WLG3u=YM%wb~(z&;YKvIW_)Fk6zWN?DBGM6DHxt%x4}Gc` z%dgQ^yLy8b`)aRHXgxggHMmX*TYx(xb^g$wwa2y>7&qd*vOsm?uUzA^#N=3*%5aQ` ztN_;y82e?0DmV=q&OGNDY??NbVM)Fu)&*t6^S{1Bn{}D=rmp8P?J87n10+P%;samv|DW%kzF-GDl^13mli$Y0K0y~@scFLEK z5;cc_zf~?jqy}A1N&L+tihu8D9NGmT_#Nua0r3{vRg`GMRUV---H7=qla*t&G1x`u zZd-ZOYSjFc826L3G~Ym^(q33Gcn0@(1df$F`7Wzdc65Nw}CEeNHFU#78 zNZAl7@pT5qC8E0~2FD`d+-%a$_^VNIL##g=<{(B zjEmk!LzbhaOxr#RDcc7v*z;;E3bIHnNXG+{&yjmtg+Tj1PC)B*A@;78* zL{lof+O$s!s$+>P8*{{nhAa~i5d4)$l03+;sUk9mQnH@esuCXl7ZOI7wval<2uO<+ zXh1DIy}WcaKFQ3I4d9=6`&mv%~8WJE#B> zhl~B5zU;+q*P7MKNnF!O=NbkOM-5?Ww&2lK(Lib@IA4$kL^>s9@RLmk`g{-M;J^ho zx-K}Bsv~JclXu+8!w6PlL^^|+>3zRkWJ%I=w53DVxiC?K<50VrgmJW?q&SP%x4R>X z;YpAMR1S6!4A&K)+_i@CA81o1u`{BgBf*ei$GX)`}B~Bk4;B%-rr|^o3%dD4q za5iI>MklQc<8Gqp6g)%?DAg~2Zn^iy5JW%jCxSm+8re%+r}XJSm{}byL+$-(IV?+* zJzR3!?~9KF<1f}H37t{lcPQ3;l*MM&O?KX(Db8hRqbW7vAL?;AZR3i6dr;IGL>GPwGf(oFbzZ*$q9HD!oxEAr~99!!84 zIUKuVX^uW(=p$t{Fm&yFytk7fL(-Ktkwx=sOYDq4iSAU#!I~c1*{-4svE{AAB^a%L z-&Q3zbmmy18$6RN+-H4?g^gO}GdZYsEiqL{-X9*KN1I&%RDtcqE{l9hXojeH9#SA# zPK((270)=Hd`8FDd|w6Cd8<3~n6kKoG+G;bbC)uV8_PH@MiB5>`CVed!fjT6Q_#y_hLG>`Pq7(x^=JWwlu0F&grv%TPK#PIh63mFils^Pm>* zmB7owwaqr*m9NT9taz_Ge{YBt z@xvk-G}zGoh+n*7*U@}XH!EsL!3*!nJl2_$>Y(u@YZ6cpC zM(0mL^xl2v3$kx?ZS`LS@i)^VJ^y8e0&SLkR@bQWEwV(pnXKN-Jyg8Q-R?N#C^FE% z4+H_MI5+drHLI_04jAsYdcILqV${jSn^dd>{Rz2b`7&puJ%)dDSS$30Y1;9;Bqu||m##VU5smGet-Dm3(#@-H7ONl_4QGDOpNNCM(#zCjbF;9kC8f=z3 zuzIAd0*+t#h)nu?F7-T)r(3ka<)e8?nG`iDR(Xy5F8Hi>5`|uW+|j~S@(85)=$e^z`z11sxQ-ZQC_Q)69))la z{_`=|^eXC^s*bhh*bkqWeYzx%Y@Xv@zv)LbGa%A|C!=8=@itU&xUCv|X#k!7rO5%u zWB`(t8t>n@q+_eJNxT*wG$BKHhdZ12 z#Q?gBy~w1VVsITN$LdG`yVXH&j2rOAN2g}Cjw-4EU1yPjJ*dGt&S)btH>^)WAr<1n zdvE6I7LTD-U2BZ{<-;5BKVXF~Nmta<5c=YT?op2W2mah*&i;z}I+`<0@4&C9 z3dQd8!5MK}^dD~HhC=4_jMr^3wb#jO93SqdaM710pag`(zcuU(sUPOl%8?!XIJ5TQ zkyppu-){sw?4~f2u*}pfKHadDY>;fH^z>cc^EpcvT-?nWa*_32(y`_xF8#^h%#^!ye}F6>|7=9FR9= zKPNMC!nqbCHw?>86MwMv6j-6$Y<55aK5$w~cLezJ*|loUyeaYBt111_-kPEA!}9mo z6#Q=e!IQ7!d(-xxX+s|7FE_6HH9Xb<4BYEMcJ7kCylvT%!Jk$y$=>Fs5*cDT>hYx7 zZRY)6JBdrAd^fwhmkwX+q)$28_Q>IubZs7K(sO2~<6gU-j#3X6A&(_Ck;Y!|16CiN z>-PWJRB4%~*?qf5uzHrWWr!g1+*F@}<-bs*;vc}Voaz=bMT1|BY%PYqkE3cV@@nta zDNHl{?qR|&qEfGYSQuJuz@hwu1P69SyJ`o=&c=05ey6v2=01}46V!L@wc6b`5!A-7 z3txNd%}ER0^O3iGe5NfeeSpK100^aX#H{~N2s^E_keb;gE;bt!S&fFHuj=TPN<7zl zw>m30m&||a-T_gzDDa1gJ@M(2xgKY*&%G7;UPad7(KfcWUsP{=`LZb9gS#oE38;^C zYGNfKAe{-NND{#GoiDZ0mGHa!GtHu_Bg5^1*iD>%%Hn%hAc-Siqx2&dp*y ztv#V(uJc~ja;*mZ4MU~ECGV_C&%yzsP|EqS?>r7|q&q^Fo@Ix$CFkwN`6`st;Qkt2 znOG1mc2?HjMay0#9@_uJmTIEjC2O-PDX~FT^2>KrPYcgMsxmQSj;Z-m37-pW+~oA- z;RUhKk#8;MDy%hqOHQ<06?oCtC^x(ISK+Atpk?txXo&E08#bW?(2H4xHx`BW=8>sq zc)vf#*Qx4}8#uI>67qfbeNU#HD>l}Rnu*O+sbRPu#x-NmLfXGgTT)LY>`gf^8WAK( zeT7mfH(_>7h!3M(E++yi)Od<}(p+HnP4@OY0e?biX9^k@`xEe%g@6cwxMXml=|_q% zvBIQ?wF9w4UObvwY$hIxW|nUbjAVsAi*G8sWIiQS%`irgM%|5cjkii%)3j0F|0Kgr zBS5rm2e8hpHjV*iCa;eY&$rYE3%%J`IXXrS;w49?(7El? z&xXrb7^6obiP;vmioOUOe^bAqULm9TVBV2ZV#V3Rm6Zs}^Uo!v6Ym;xl_`IG)#beG| z(sl1fj6$*Z%7i}gj6-0PlY`d)#E*HDG3>_f^jiNt3kH6FFr4l)j?0?N3;s+UzO)G? zw+)pyKYU^(ic$R%hh52^(?;0A9SC_AOa_OZ$xu&5$2|g-C^?fGIwG{cP9aWNQbi5B zCA5w4WAN6C*EJmO#>uUsMYeMV2bt9R@^JI>2GRnbc8GS5r;(4F?Cgx!q3{-E$Xnu_ zi$HaH<5y{0VMm@acIB|x^jfFK)O6M=1wlnk+2Q0z3mY!UUsnY zo}Dka)&xQ^k!!u#vyk?xVyh`z*?F;{Xa>2my|vmVTI!cK$-1)6@1+eHL^m;|P+4*` zb634@Eo6H9tK0#6uaQNWnd%-DIyE9==^N5@Uge3%FA@X6N(m8`@A_i?ZdCV%XG_2L zGvLNu(DwT`&sS7qYO^=%y19E~B>RFTUxaBp^|Qls#r?(>uf&GqcL|8t2%`b43}k%R zil#_3)A2~n6#^-0V0CBQfBl5e#3gM!;aWsTV|YGC*El2~1OjFpLR+4tN{SIysrtnX zt-&0o6D>UNZ%a>L;uPQa*4-}lR#m3^WMN$d6bADg^32g%DA5arIxDyxq$AGpsK*&Z zRTZQb2UuiW7c1E*cEfhhcuMC@K41%X>9_Dto!6 zb)Tv3GGO23>*7pjFGi7F8kO~iyyqw6&j0#hIgTo=VvQ6tr7T$c+tUN;uM3id=fFNj zMx`1LZrFxRUzNe{Jtt*C0;O8xL+tgjDR~(*Dawri97xn*LpKVZ3C{X^_v=MTW3Lr^Dq@)a}9Wf+H|Kk6qIVB1T$^Sx8j3J14 z2pNJ}iUW0k3vtiIg0Pq30Bs@CrF1~92&9xOsvke1j-MK#EKT_THANUnlY#OO9@0`E UCPb68- - // 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.Paragraph#insertBreak:member(1)': - >- // Link to full sample: @@ -14740,6 +14725,21 @@ await context.sync(); console.log(paragraph.text); }); +'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 + + // 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.Range#getComments:member(1)': - >- // Link to full sample: From 4f3fdea45fb38c0ebddcd98e969910e04b822c65 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 19 Oct 2022 13:50:45 -0700 Subject: [PATCH 126/336] [Outlook] (JSON) Add Teams manifest note to contextual add-in snippets (#725) --- .../contextual.yaml | 28 +++++++++++-------- .../selected.yaml | 28 +++++++++++-------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/samples/outlook/75-entities-and-regex-matches/contextual.yaml b/samples/outlook/75-entities-and-regex-matches/contextual.yaml index 2545a24d6..ab5a9593b 100644 --- a/samples/outlook/75-entities-and-regex-matches/contextual.yaml +++ b/samples/outlook/75-entities-and-regex-matches/contextual.yaml @@ -25,26 +25,32 @@ script: console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); } - // This add-in declares extension point 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. - // - // - // - // - // - // - // + /* + 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 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 while running this as a contextual add-in

+

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

diff --git a/samples/outlook/75-entities-and-regex-matches/selected.yaml b/samples/outlook/75-entities-and-regex-matches/selected.yaml index 7db08858f..e2f622e5d 100644 --- a/samples/outlook/75-entities-and-regex-matches/selected.yaml +++ b/samples/outlook/75-entities-and-regex-matches/selected.yaml @@ -63,26 +63,32 @@ script: } } - // This add-in declares extension point 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. - // - // - // - // - // - // - // + /* + 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

-

Try it out while running this as a contextual add-in

+

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

From db7f446b7c12c139c8cba240611ac5b42d11d552 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 20 Oct 2022 11:30:00 -0700 Subject: [PATCH 127/336] [Word] Refine table-cell-access snippet (#726) --- samples/word/40-tables/table-cell-access.yaml | 14 +++++++++----- snippet-extractor-output/snippets.yaml | 8 ++++++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 867ddbce4..8495a1ce0 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -12,12 +12,13 @@ script: $("#setup").click(() => tryCatch(insertTable)); async function getTableCell() { + // Get 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 text is " + firstCell.text); + console.log("First cell's text is: " + firstCell.text); }); } @@ -52,12 +53,15 @@ template: This sample demonstrates how to get a cell from a table.
-
-

Try it out

+
+

Set up

- Get the contents of first cell.

+ +

+ +
+

Try it out

diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 88387ff43..454d7b996 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -15059,22 +15059,26 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + // Get 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 text is " + firstCell.text); + console.log("First cell's text is: " + firstCell.text); }); 'Word.TableCell:class': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml + // Get 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 text is " + firstCell.text); + console.log("First cell's text is: " + firstCell.text); }); From 5bab70c53ac9c6af3d25fb7eb0f2e9e82a54b4bb Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 20 Oct 2022 14:45:44 -0700 Subject: [PATCH 128/336] [Word] Add snippet that shows how to get various table formatting (#720) * [Word] Add snippets that shows how to get various table borders * Update to provide an example of using a string literal * Merge with other table formatting snippets * Updates based on feedback * Metadata mappings --- playlists-prod/word.yaml | 11 + playlists/word.yaml | 11 + samples/word/40-tables/manage-formatting.yaml | 260 +++++++++++ snippet-extractor-metadata/word.xlsx | Bin 16414 -> 17321 bytes snippet-extractor-output/snippets.yaml | 414 ++++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 698 insertions(+) create mode 100644 samples/word/40-tables/manage-formatting.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 9d18ede10..af9c3553c 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -173,6 +173,17 @@ group: Tables api_set: WordApi: '1.3' +- id: word-tables-manage-formatting + name: Table formatting + fileName: manage-formatting.yaml + description: >- + Gets the formatting details of a table, a table row, and a table cell, + including borders, alignment, and cell padding. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + group: Tables + api_set: + WordApi: '1.3' - 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 689674e30..0e58cf811 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -173,6 +173,17 @@ group: Tables api_set: WordApi: '1.3' +- id: word-tables-manage-formatting + name: Table formatting + fileName: manage-formatting.yaml + description: >- + Gets the formatting details of a table, a table row, and a table cell, + including borders, alignment, and cell padding. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-formatting.yaml + group: Tables + api_set: + WordApi: '1.3' - id: word-document-insert-section-breaks name: Add a section fileName: insert-section-breaks.yaml diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml new file mode 100644 index 000000000..f45996924 --- /dev/null +++ b/samples/word/40-tables/manage-formatting.yaml @@ -0,0 +1,260 @@ +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.' +author: OfficeDev +host: WORD +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)); + + async function getTableAlignment() { + // Get 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}`); + }); + } + + async function getTableBorder() { + // Get border details about the first table in the document. + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const borderLocation = Word.BorderLocation.top; + const border = firstTable.getBorder(borderLocation); + 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`); + }); + } + + async function getTableCellPadding() { + // Get cell padding details about the first table in the document. + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const cellPaddingLocation = Word.CellPaddingLocation.right; + const cellPadding = firstTable.getCellPadding(cellPaddingLocation); + await context.sync(); + + console.log( + `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` + ); + }); + } + + async function getTableRowAlignment() { + // Get 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}`); + }); + } + + async function getTableRowBorder() { + // Get 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(); + const borderLocation = Word.BorderLocation.bottom; + const border = firstTableRow.getBorder(borderLocation); + 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`); + }); + } + + async function getTableRowCellPadding() { + // Get cell padding 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 cellPaddingLocation = Word.CellPaddingLocation.bottom; + const cellPadding = firstTableRow.getCellPadding(cellPaddingLocation); + await context.sync(); + + console.log( + `Cell padding details about the ${cellPaddingLocation} border of the first table's first row: ${cellPadding.value} points` + ); + }); + } + + async function getTableCellAlignment() { + // Get content alignment details about the first cell of the first table in the document. + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + 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}`); + }); + } + + async function getTableCellBorder() { + // Get border details about the first of the first table in the document. + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + const borderLocation = "Left"; + const border = firstCell.getBorder(borderLocation); + 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`); + }); + } + + async function getTableCellCellPadding() { + // Get cell padding details about the first cell of the first table in the document. + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + const cellPaddingLocation = "Left"; + const cellPadding = firstCell.getCellPadding(cellPaddingLocation); + await context.sync(); + + console.log( + `Cell padding details about the ${cellPaddingLocation} border of the first table's first cell: ${cellPadding.value} points` + ); + }); + } + + async function insertTable() { + 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.Style.gridTable5Dark_Accent2; + table.styleFirstColumn = false; + + 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 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

+

Table formatting

+

+ + + +

+

Table row formatting

+

+ + + +

+

Table cell formatting

+

+ + + +

+
+ 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 4b0e8a8257c99bd9486b50b6fee84e325975d450..c1a486ef5b632f8e81d9c322fd88be96a17c0a53 100644 GIT binary patch delta 8345 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 Count: " + length); }); }); +'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 + + // Get 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.Body#type:member': - >- // Link to full sample: @@ -13403,6 +13417,25 @@ console.log(`Body type of note: ${item.body.type}`); }); +'Word.BorderLocation:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get border details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const borderLocation = Word.BorderLocation.top; + const border = firstTable.getBorder(borderLocation); + 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`); + }); 'Word.BreakType:enum': - >- // Link to full sample: @@ -13414,6 +13447,23 @@ await context.sync(); console.log("success"); }); +'Word.CellPaddingLocation:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get cell padding details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const cellPaddingLocation = Word.CellPaddingLocation.right; + const cellPadding = firstTable.getCellPadding(cellPaddingLocation); + await context.sync(); + + console.log( + `Cell padding details about the ${cellPaddingLocation} border of the first table: ${cellPadding.value} points` + ); + }); 'Word.ChangeTrackingMode:enum': - >- // Link to full sample: @@ -15054,6 +15104,42 @@ await context.sync(); }); +'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.Style.gridTable5Dark_Accent2; + table.styleFirstColumn = false; + + await context.sync(); + }); +'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 + + // Get border details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const borderLocation = Word.BorderLocation.top; + const border = firstTable.getBorder(borderLocation); + 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`); + }); 'Word.Table#getCell:member(1)': - >- // Link to full sample: @@ -15068,6 +15154,149 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); +'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 + + // Get cell padding details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const cellPaddingLocation = Word.CellPaddingLocation.right; + const cellPadding = firstTable.getCellPadding(cellPaddingLocation); + await context.sync(); + + console.log( + `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 + + // Get 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get 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#rows:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get 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.Table#verticalAlignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get 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.TableBorder#color:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get border details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const borderLocation = Word.BorderLocation.top; + const border = firstTable.getBorder(borderLocation); + 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`); + }); +'Word.TableBorder#type:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get border details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const borderLocation = Word.BorderLocation.top; + const border = firstTable.getBorder(borderLocation); + 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`); + }); +'Word.TableBorder#width:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get border details about the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const borderLocation = Word.BorderLocation.top; + const border = firstTable.getBorder(borderLocation); + 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`); + }); 'Word.TableCell:class': - >- // Link to full sample: @@ -15082,3 +15311,188 @@ await context.sync(); console.log("First cell's text is: " + firstCell.text); }); +'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 + + // Get border details about the first of the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + const borderLocation = "Left"; + const border = firstCell.getBorder(borderLocation); + 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`); + }); +'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 + + // Get cell padding details about the first cell of the first table in the + document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + const cellPaddingLocation = "Left"; + const cellPadding = firstCell.getCellPadding(cellPaddingLocation); + await context.sync(); + + console.log( + `Cell padding details about the ${cellPaddingLocation} border of the first table's first cell: ${cellPadding.value} points` + ); + }); +'Word.TableCell#horizontalAlignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get content alignment details about the first cell of the first table in + the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + 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}`); + }); +'Word.TableCell#verticalAlignment:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get content alignment details about the first cell of the first table in + the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + 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}`); + }); +'Word.TableCollection:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get 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.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 + + // Get 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.TableRow#getBorder:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get 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(); + const borderLocation = Word.BorderLocation.bottom; + const border = firstTableRow.getBorder(borderLocation); + 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`); + }); +'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 + + // Get cell padding 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 cellPaddingLocation = Word.CellPaddingLocation.bottom; + const cellPadding = firstTableRow.getCellPadding(cellPaddingLocation); + await context.sync(); + + console.log( + `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 + + // Get 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get 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(); + const borderLocation = Word.BorderLocation.bottom; + const border = firstTableRow.getBorder(borderLocation); + 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`); + }); diff --git a/view-prod/word.json b/view-prod/word.json index 801c4d178..36becf98c 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -18,6 +18,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-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-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.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-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml", diff --git a/view/word.json b/view/word.json index fbac9597e..f5f697e86 100644 --- a/view/word.json +++ b/view/word.json @@ -18,6 +18,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-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-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.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-comments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-comments.yaml", From 7bfe077fab942f379e588d0a3cd93d9114c5242e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 24 Oct 2022 08:05:39 -0700 Subject: [PATCH 129/336] [Word] (list) Clean up snippet (#730) --- samples/word/20-lists/insert-list.yaml | 14 +++++++++----- snippet-extractor-output/snippets.yaml | 14 +++++++++----- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index c470fc547..060a7aa49 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -12,23 +12,27 @@ script: $("#setup").click(() => tryCatch(setup)); async function insertList() { - // This example starts a new list stating with the second paragraph. + // This example starts a new list with the second paragraph. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; paragraphs.load("$none"); // No properties needed. await context.sync(); - const list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); list.load("$none"); // No properties needed. await context.sync(); - // To add new items to the list use start/end on the insert location parameter. + // To add new items to the list, use Start or End on the insertLocation parameter. list.insertParagraph("New list item on top of the list", "Start"); const paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); - paragraph.listItem.level = 4; // Sets up list level for the list item. - // To add paragraphs outside the list use before/after: + + // Sets 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(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index cc5430221..3180530fe 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14664,7 +14664,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 stating with the second paragraph. + // This example starts a new list with the second paragraph. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; @@ -14672,16 +14672,20 @@ await context.sync(); - const list = paragraphs.items[1].startNewList(); // Indicates new list to be started in the second paragraph. + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); list.load("$none"); // No properties needed. await context.sync(); - // To add new items to the list use start/end on the insert location parameter. + // To add new items to the list, use Start or End on the insertLocation parameter. list.insertParagraph("New list item on top of the list", "Start"); const paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); - paragraph.listItem.level = 4; // Sets up list level for the list item. - // To add paragraphs outside the list use before/after: + + // Sets 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(); From dd278afbb36891e5ae1e5b333ed134173d211fd7 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 24 Oct 2022 08:53:29 -0700 Subject: [PATCH 130/336] [Word] (list) Tweak, additional mappings (#731) --- samples/word/20-lists/insert-list.yaml | 4 +- snippet-extractor-metadata/word.xlsx | Bin 17321 -> 17501 bytes snippet-extractor-output/snippets.yaml | 126 ++++++++++++++++++++++++- 3 files changed, 127 insertions(+), 3 deletions(-) diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 060a7aa49..2640dafe1 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -27,7 +27,7 @@ script: // To add new items to the list, use Start or End on the insertLocation parameter. list.insertParagraph("New list item on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); + const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); // Sets up list level for the list item. paragraph.listItem.level = 4; @@ -88,7 +88,7 @@ template:
-

Try it out

+

Try it out

diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index c1a486ef5b632f8e81d9c322fd88be96a17c0a53..121ff2b21f44cfff835b10fa529572ca6f31266e 100644 GIT binary patch delta 8546 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 3180530fe..0fdd4c014 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14425,6 +14425,99 @@ console.log("Inserted section without an associated page break"); }); +'Word.List: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 = context.document.body.paragraphs; + paragraphs.load("$none"); // No properties needed. + + await context.sync(); + + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); + list.load("$none"); // No properties needed. + + await context.sync(); + + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item on top of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + + // Sets 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#insertParagraph: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. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); // No properties needed. + + await context.sync(); + + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); + list.load("$none"); // No properties needed. + + await context.sync(); + + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item on top of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + + // Sets 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: + 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"); // No properties needed. + + await context.sync(); + + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); + list.load("$none"); // No properties needed. + + await context.sync(); + + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item on top of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + + // Sets 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.NoteItem#delete:member(1)': - >- // Link to full sample: @@ -14680,7 +14773,7 @@ // To add new items to the list, use Start or End on the insertLocation parameter. list.insertParagraph("New list item on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (4th level)", "End"); + const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); // Sets up list level for the list item. paragraph.listItem.level = 4; @@ -14792,6 +14885,37 @@ .insertParagraph("", "After") .insertInlinePictureFromBase64(base64Image, "End"); + await context.sync(); + }); +'Word.ParagraphCollection#items: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"); // No properties needed. + + await context.sync(); + + // Start new list using the second paragraph. + const list = paragraphs.items[1].startNewList(); + list.load("$none"); // No properties needed. + + await context.sync(); + + // To add new items to the list, use Start or End on the insertLocation parameter. + list.insertParagraph("New list item on top of the list", "Start"); + const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + + // Sets 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.Range#getComments:member(1)': From 5525760207c033defb322c6240ab309f656a6c74 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 24 Oct 2022 14:11:52 -0700 Subject: [PATCH 131/336] [Word] (list) Add snippet on organizing a list (#733) * [Word] (list) Add snippet on formatting * Updates based on feedback * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback * Rename snippet * rename function * Add mappings Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + samples/word/20-lists/insert-list.yaml | 12 +- samples/word/20-lists/organize-list.yaml | 118 +++++++++ snippet-extractor-metadata/word.xlsx | Bin 17501 -> 17769 bytes snippet-extractor-output/snippets.yaml | 298 +++++++++++++++++++++-- view-prod/word.json | 1 + view/word.json | 1 + 8 files changed, 422 insertions(+), 26 deletions(-) create mode 100644 samples/word/20-lists/organize-list.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index af9c3553c..bcea54696 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -54,6 +54,15 @@ group: Lists api_set: WordApi: '1.3' +- id: word-lists-organize-list + name: Organize a list + fileName: organize-list.yaml + description: Shows how to create and organize a list. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + group: Lists + api_set: + WordApi: '1.3' - id: word-paragraph-get-paragraph-on-insertion-point name: Get paragraph from insertion point fileName: get-paragraph-on-insertion-point.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 0e58cf811..ecb86f0ef 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -54,6 +54,15 @@ group: Lists api_set: WordApi: '1.3' +- id: word-lists-organize-list + name: Organize a list + fileName: organize-list.yaml + description: Shows how to create and organize a list. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/20-lists/organize-list.yaml + group: Lists + api_set: + WordApi: '1.3' - id: word-paragraph-get-paragraph-on-insertion-point name: Get paragraph from insertion point fileName: get-paragraph-on-insertion-point.yaml diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 2640dafe1..09fae2d97 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -8,26 +8,26 @@ api_set: WordApi: '1.3' script: content: | - $("#insert-controls").click(() => tryCatch(insertList)); + $("#insert-list").click(() => tryCatch(insertList)); $("#setup").click(() => tryCatch(setup)); async function insertList() { // This example starts a new list with the second paragraph. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); // No properties needed. + paragraphs.load("$none"); await context.sync(); // Start new list using the second paragraph. const list = paragraphs.items[1].startNewList(); - list.load("$none"); // No properties needed. + 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 on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + 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"); // Sets up list level for the list item. paragraph.listItem.level = 4; @@ -89,7 +89,7 @@ template:

Try it out

-
diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml new file mode 100644 index 000000000..bac2e009e --- /dev/null +++ b/samples/word/20-lists/organize-list.yaml @@ -0,0 +1,118 @@ +order: 2 +id: word-lists-organize-list +name: Organize a list +description: Shows how to create and organize a list. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.3' +script: + content: | + $("#insert-list").click(() => tryCatch(insertOrganizeList)); + $("#setup").click(() => tryCatch(setup)); + + async function insertOrganizeList() { + // Insert a list starting with the first paragraph then set numbering and bullet types of the list items. + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].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 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(); + + 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]}`); + } + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph( + "Create a list then customize the numbering and bullets. You can also organize the list items into multiple levels and change the style, alignment, etc.", + "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 demonstrates how to create and organize a list. +
+ +
+

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/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 121ff2b21f44cfff835b10fa529572ca6f31266e..c4cd95d5e69f5faf8bb464cd1c056bb3d2f5c863 100644 GIT binary patch delta 8852 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 EKTu=M^8f$< delta 8619 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 aiVMQ|@FhtI!0`ws3rSESYJK?+<$nNTa&O20 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0fdd4c014..ae0c610cc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14434,19 +14434,19 @@ await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); // No properties needed. + paragraphs.load("$none"); await context.sync(); // Start new list using the second paragraph. const list = paragraphs.items[1].startNewList(); - list.load("$none"); // No properties needed. + 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 on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + 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"); // Sets up list level for the list item. paragraph.listItem.level = 4; @@ -14465,19 +14465,19 @@ await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); // No properties needed. + paragraphs.load("$none"); await context.sync(); // Start new list using the second paragraph. const list = paragraphs.items[1].startNewList(); - list.load("$none"); // No properties needed. + 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 on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + 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"); // Sets up list level for the list item. paragraph.listItem.level = 4; @@ -14487,6 +14487,135 @@ await context.sync(); }); +'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 + + // Insert a list starting with the first paragraph then set numbering and + bullet types of the list items. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].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 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(); + + 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)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + + // Insert a list starting with the first paragraph then set numbering and + bullet types of the list items. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].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 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(); + + 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': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + + // Insert a list starting with the first paragraph then set numbering and + bullet types of the list items. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].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 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(); + + 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.ListItem#level:member': - >- // Link to full sample: @@ -14496,19 +14625,19 @@ await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); // No properties needed. + paragraphs.load("$none"); await context.sync(); // Start new list using the second paragraph. const list = paragraphs.items[1].startNewList(); - list.load("$none"); // No properties needed. + 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 on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + 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"); // Sets up list level for the list item. paragraph.listItem.level = 4; @@ -14518,6 +14647,135 @@ await context.sync(); }); +'Word.ListBullet:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + + // Insert a list starting with the first paragraph then set numbering and + bullet types of the list items. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].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 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(); + + 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': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + + // Insert a list starting with the first paragraph then set numbering and + bullet types of the list items. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].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 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(); + + 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': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml + + // Insert a list starting with the first paragraph then set numbering and + bullet types of the list items. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("$none"); + + await context.sync(); + + // Use the first paragraph to start a new list. + const list = paragraphs.items[0].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 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(); + + 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.NoteItem#delete:member(1)': - >- // Link to full sample: @@ -14761,19 +15019,19 @@ await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); // No properties needed. + paragraphs.load("$none"); await context.sync(); // Start new list using the second paragraph. const list = paragraphs.items[1].startNewList(); - list.load("$none"); // No properties needed. + 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 on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + 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"); // Sets up list level for the list item. paragraph.listItem.level = 4; @@ -14896,19 +15154,19 @@ await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; - paragraphs.load("$none"); // No properties needed. + paragraphs.load("$none"); await context.sync(); // Start new list using the second paragraph. const list = paragraphs.items[1].startNewList(); - list.load("$none"); // No properties needed. + 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 on top of the list", "Start"); - const paragraph = list.insertParagraph("New list item at the end of the list (5th level)", "End"); + 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"); // Sets up list level for the list item. paragraph.listItem.level = 4; diff --git a/view-prod/word.json b/view-prod/word.json index 36becf98c..e911d94f8 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -5,6 +5,7 @@ "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.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", "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", "word-paragraph-insert-in-different-locations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-in-different-locations.yaml", diff --git a/view/word.json b/view/word.json index f5f697e86..d64c099d4 100644 --- a/view/word.json +++ b/view/word.json @@ -5,6 +5,7 @@ "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-content-controls.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", "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", "word-paragraph-insert-in-different-locations": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/25-paragraph/insert-in-different-locations.yaml", From 2191ff7bc810ad8bd856d72d08bb23333e8ca23e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 24 Oct 2022 14:50:58 -0700 Subject: [PATCH 132/336] [Word] (range) Add snippet to compare range locations (#734) --- playlists-prod/word.yaml | 9 ++ playlists/word.yaml | 9 ++ samples/word/35-ranges/compare-location.yaml | 103 +++++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 5 files changed, 123 insertions(+) create mode 100644 samples/word/35-ranges/compare-location.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index bcea54696..1b9e60307 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -173,6 +173,15 @@ group: Ranges api_set: WordApi: '1.3' +- id: word-ranges-compare-location + name: Compare range locations + fileName: compare-location.yaml + description: This sample shows how to compare the locations of two ranges. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml + group: Ranges + api_set: + WordApi: '1.3' - 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 ecb86f0ef..86fe45628 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -173,6 +173,15 @@ group: Ranges api_set: WordApi: '1.3' +- id: word-ranges-compare-location + name: Compare range locations + fileName: compare-location.yaml + description: This sample shows how to compare the locations of two ranges. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/35-ranges/compare-location.yaml + group: Ranges + api_set: + WordApi: '1.3' - id: word-tables-table-cell-access name: Create and access a table fileName: table-cell-access.yaml diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml new file mode 100644 index 000000000..6c5e2ccb3 --- /dev/null +++ b/samples/word/35-ranges/compare-location.yaml @@ -0,0 +1,103 @@ +order: 3 +id: word-ranges-compare-location +name: Compare range locations +description: This sample shows how to compare the locations of two ranges. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.3' +script: + content: | + $("#compare").click(() => tryCatch(compareLocations)); + $("#setup").click(() => tryCatch(setup)); + + async function compareLocations() { + // Compare the location of one paragraph in relation to another paragraph. + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("items"); + + await context.sync(); + + const firstParagraphAsRange = paragraphs.items[0].getRange(); + const secondParagraphAsRange = paragraphs.items[1].getRange(); + + const comparedLocation = firstParagraphAsRange.compareLocationWith(secondParagraphAsRange); + + await context.sync(); + + console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.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.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" + ); + }); + } + + 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 compare locations of ranges. +
    + +
    +

    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/view-prod/word.json b/view-prod/word.json index e911d94f8..4730720dd 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -18,6 +18,7 @@ "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", "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-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-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-section-breaks.yaml", diff --git a/view/word.json b/view/word.json index d64c099d4..2ac500d0f 100644 --- a/view/word.json +++ b/view/word.json @@ -18,6 +18,7 @@ "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", "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-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-insert-section-breaks": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/insert-section-breaks.yaml", From 510f76d818139ba2bb5d7f4a9f95a360d31efb11 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 24 Oct 2022 14:56:05 -0700 Subject: [PATCH 133/336] [Word] (range) Add metadata mappings for compare locations snippet (#735) * [Word] (range) Add snippet to compare range locations * Add metadata mappings --- snippet-extractor-metadata/word.xlsx | Bin 17769 -> 17876 bytes snippet-extractor-output/snippets.yaml | 44 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index c4cd95d5e69f5faf8bb464cd1c056bb3d2f5c863..17268d688c920e9d51df092618b06d5f2e392912 100644 GIT binary patch delta 8968 zcmZ8{WmKF&lkVVy1qLU$1r1Js;O-Cz?hYZi2YU(bHn>Z0w-8(g4U)m#J-Ay4n{V$u zXZPOz(SN$D>YVDXs;A^I3SlN1p-vMG-7rg8qX`iNnu8jlkpM){C?0)||rmTrAE_{(x2?IsNute)*>B~QA1|3u47p0xwY=%3K zWKZI!PZ(+mLkkH%dmzB)60b7?>S_ zQmT7T?@n&1qPpuxhaIS;ye8jOw1}{V%U!09(Bj@HnRnyG z&IOym@ep_g{(AhU*;r=-(jM>e#^TRCd5J3S+tS=ttOy$)NBJ?h3Xr&!K{>!8M+^tzeAh|V3B=!H`3s;u%&*{G3+F-b z5@k$%jCay0!_1=g7ebnTG&0A@bLPCtt`d{Sra&IXZdAw7>#qJX&5800SeX49hQ?xX zB2(j9<)ODd5R*!}qo*b%i)b(ORkYW~W3|HU-TRTR)VIfP9FQMUlDx#Lf@VV$gx~3mH{@%qDr7noFuYhEkvbHV#RUa&48PVh*sdON zf{LLLHnL;zAYxo}w{*D^fIxiF(9c-Zz_Q~qCsx=Q+A#(4>QMMSu26)*H-%ur1)2I& z=jvg1+L;Dn1wn^}_IT~=CaFML){XQA$$%Y>DClx$)d*1&q=MP@03}%*rp278CDH9~ zgvG5GW2G`;H!CiIV|s8hK7<3!nfhgoZHkWf`Xju#`DEb^+a%a>@Z($Fd$r;wz>-Mp z<|ltOs&*T--V=;k-hV_|Dn6vXE3BYG(K(&9D-pgxCoMJ3Hs>@~$j6wuGrvJU{VU6} zC&eC8PtaV4hE^$|X&wTrNrW40vaKw05oTcNj^yP|DgjD?b1!` zj#LcFeq$1fZeaq`cE|RUz+Tq@G}5#6V8puDs=7X59z(@LWa>oMUPL=z2*&n;51j>G z_ZL0bbLOaS_pTZdl}tZ9JR2pw6!1eeOv8n=q@}drp9G9U)McNuBHJa_QI5wd`ReT- zkolZ3(;2>fYtL6I&J`L$Tfs%$`H44<{Ug(67{V2&AopaU;% z&>orS9S9y_%8Nw&3!0$NnHN--{gC}o$A;#ZY)P8z}|0M>2US2@|*^-S6;&udHb^Of7smpQg zLR-Z?{>FNye(=_`%NlJuc5!vNmVuQa36ebCU11r)U9J<6G!Afx1-#tf3wFQwz1;5B z0x$b%-CY5Sc>xa>`%hG2soepceviA|hu43f=YeOZzxNl<+wplOVibQ}{#>7o-eEoO z2N?xC)c<+8YjJN4c=&VI!jadlbLgbu18)dtDYt4&UX7XJXU=x-ElsA#I=(X3ZFI!Y zZ7~h?;J3(0$_0K6qB4kNqWO=iUEDzXS7L&5!3z7BEr%p^pL$=}CrxdS@Mf_1aGr4Q ztJb?C8ttj12pW)y#8wQbA{-GN_q0`&U!R2`kfHYrU;hc>bkoVOpa1OC$ZeSmZoSSe z#u7urGO0s?HI`t*bRzsN-KZpXNA`(BNL8bjdj+c`NP(`g_w6?MC_f`bVXr*vqSRZL3|xUw!YGs$w)(Pe(!9VTypmHq!P-P*=eT*fU#C=FJ%o zy3*Y8&1={4Qlg22_WH0fa9O3bUbIxXm`+wmx*)c1{Ms$xX1+Ikm^OGSuIyT3NH%>F z{`d`iH?pCQsmSFnt95TJRFt~JRa|Ur6Z0WAxi&g4?`( zdfeQWJe>^P)>Yt=V3USaSa+aFx9-vdX3<|4`Ae

    jJ&x`SJ%UuZPO}caQ=GXk4eb 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml + + // Compare the location of one paragraph in relation to another paragraph. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("items"); + + await context.sync(); + + const firstParagraphAsRange = paragraphs.items[0].getRange(); + const secondParagraphAsRange = paragraphs.items[1].getRange(); + + const comparedLocation = firstParagraphAsRange.compareLocationWith(secondParagraphAsRange); + + await context.sync(); + + console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.value}`); + }); 'Word.NoteItem#delete:member(1)': - >- // Link to full sample: @@ -15176,6 +15198,28 @@ await context.sync(); }); +'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 + + // Compare the location of one paragraph in relation to another paragraph. + + await Word.run(async (context) => { + const paragraphs = context.document.body.paragraphs; + paragraphs.load("items"); + + await context.sync(); + + const firstParagraphAsRange = paragraphs.items[0].getRange(); + const secondParagraphAsRange = paragraphs.items[1].getRange(); + + const comparedLocation = firstParagraphAsRange.compareLocationWith(secondParagraphAsRange); + + await context.sync(); + + console.log(`Location of the first paragraph in relation to the second paragraph: ${comparedLocation.value}`); + }); 'Word.Range#getComments:member(1)': - >- // Link to full sample: From 6ac1188e17784948004eea434aafb1fb443e8822 Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Fri, 18 Nov 2022 11:28:24 -0800 Subject: [PATCH 134/336] [Excel] (Data types) Add entity icons snippet (#728) * [Excel] (Data types) Add entity icons snippet * Update HTML in entity icon snippet * Minor snippet updates, update excel.xlsx * Run yarn start * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Re-run yarn start Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/excel.yaml | 9 ++ playlists/excel.yaml | 9 ++ .../data-types-entity-attribution.yaml | 2 +- .../data-types-entity-icons.yaml | 120 ++++++++++++++++++ .../20-data-types/data-types-references.yaml | 2 +- snippet-extractor-metadata/excel.xlsx | Bin 28158 -> 28299 bytes snippet-extractor-output/snippets.yaml | 28 ++++ view-prod/excel.json | 1 + view/excel.json | 1 + 9 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 samples/excel/20-data-types/data-types-entity-icons.yaml diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index 70e67c99d..b479e67f3 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -339,6 +339,15 @@ group: Data Types api_set: ExcelApi: '1.16' +- id: excel-data-types-icons + name: 'Data types: Create entity icons' + fileName: data-types-entity-icons.yaml + description: Display all the icons available for entity data types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/20-data-types/data-types-entity-icons.yaml + group: Data Types + api_set: + ExcelApi: '1.16' - id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' fileName: data-types-entity-attribution.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index f18d0af95..df0132102 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -339,6 +339,15 @@ group: Data Types api_set: ExcelApi: '1.16' +- id: excel-data-types-icons + name: 'Data types: Create entity icons' + fileName: data-types-entity-icons.yaml + description: Display all the icons available for entity data types. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/20-data-types/data-types-entity-icons.yaml + group: Data Types + api_set: + ExcelApi: '1.16' - id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' fileName: data-types-entity-attribution.yaml 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 c5c2be217..953eaee8f 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: excel-data-types-entity-attribution name: 'Data types: Entity value attribution properties' description: This sample shows how to set data provider attributions on entity values in the card layout. diff --git a/samples/excel/20-data-types/data-types-entity-icons.yaml b/samples/excel/20-data-types/data-types-entity-icons.yaml new file mode 100644 index 000000000..335f1e75d --- /dev/null +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -0,0 +1,120 @@ +order: 5 +id: excel-data-types-icons +name: 'Data types: Create entity icons' +description: Display all the icons available for entity data types. +host: EXCEL +api_set: + ExcelApi: '1.16' +script: + content: | + $("#setup").click(() => tryCatch(setup)); + $("#create-icons").click(() => tryCatch(createIcons)); + + // Retrieve the entity card icons enum. + const iconNames = Excel.EntityCompactLayoutIcons; + let icons; + + function createEntitiesWithIcons(icons): Excel.EntityCellValue[][] { + /* This method creates an entity data type for each + * icon in the `EntityCompactLayoutIcons` enum, + * and then displays the icon name with its icon. + */ + let entities = []; + icons.forEach(function(iconName, index, array) { + let icon = iconNames[iconName]; + entities.push([ + { + type: "Entity", + text: iconName, + properties: {}, + layouts: { + compact: { + icon + } + } + } + ]); + }); + return entities; + } + + async function createIcons() { + await Excel.run(async (context) => { + /* This method populates Column A in the worksheet + * with all of the entities and icons created by the + * `createEntitiesWithIcons` method. + */ + const sheet = context.workbook.worksheets.getItemOrNullObject("Sample"); + const rangeString = "A1:A" + Object.keys(iconNames).length; + const range = sheet.getRange(rangeString ); + + range.valuesAsJson = createEntitiesWithIcons(Object.keys(iconNames)); + + 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(); + }); + } + + /** 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 display all the icons available for entity data types, along with the name of each icon.

    +

    After creating the icons, select an icon to open the entity card for that data type. The entity cards in this sample display only the icon names.

    +
    +
    +

    Set up

    + +
    +
    +

    Run sample

    + +
    + 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/excel/20-data-types/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml index d7e5c1020..af9070c87 100644 --- a/samples/excel/20-data-types/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -1,4 +1,4 @@ -order: 6 +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.' diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index 7f77e2db9d41c5f5013b7402b996433ded32195c..d7f62f99e61fa0e361ecd1aabe6fe8d7a5efde12 100644 GIT binary patch delta 20669 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%0DV>IcXcP@DQHd}Ow$WZF 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 delta 20531 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 + // 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, + * and then displays the icon name with its icon. + */ + let entities = []; + icons.forEach(function(iconName, index, array) { + let icon = iconNames[iconName]; + entities.push([ + { + type: "Entity", + text: iconName, + properties: {}, + layouts: { + compact: { + icon + } + } + } + ]); + }); + return entities; + } 'Excel.ErrorCellValue:type': - >- // Link to full sample: diff --git a/view-prod/excel.json b/view-prod/excel.json index b63964555..303a72725 100644 --- a/view-prod/excel.json +++ b/view-prod/excel.json @@ -36,6 +36,7 @@ "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", + "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-validation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/22-data-validation/data-validation.yaml", diff --git a/view/excel.json b/view/excel.json index dda933309..ddc6200cd 100644 --- a/view/excel.json +++ b/view/excel.json @@ -36,6 +36,7 @@ "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", + "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-validation": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/22-data-validation/data-validation.yaml", From 9b01172b70e4d48f3e7609b84785d85e21b765e3 Mon Sep 17 00:00:00 2001 From: David Chesnut Date: Tue, 29 Nov 2022 16:41:50 -0800 Subject: [PATCH 135/336] Add snippets for new PowerPoint slide, shape, and text range APIs (#737) * Add get set sample for PowerPoint slides * Moving preview PPT snippet to preview folder * fix libraries * ran build * add slides snippet to playlist * undo previous commit * fix api_set * remove white space * Add preview snippets for shapes and text ranges * minor fix * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Refactor and clean code * This snippets are GA now, moved out of preview. * fix loop to not contain context.sync * Changes based on code review feedback. * Sort classes. * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Add missing description. * rerun yarn * add additional metadata properties * update snippet metadata order. * fix snippet order * Apply suggestions from code review Co-authored-by: Alison McKay * clarify description * Fixes based from code review feedback * Fix text based on review feedback. * Add check for 10 character requirement * Update samples/powerpoint/text/get-set-textrange.yaml Co-authored-by: Alison McKay * Fix typo Co-authored-by: AlexJerabek Co-authored-by: Elizabeth Samuel Co-authored-by: Alison McKay --- package-lock.json | 2939 +++++++++++++++++ package.json | 3 +- playlists-prod/powerpoint.yaml | 29 +- playlists/powerpoint.yaml | 27 + samples/powerpoint/shapes/get-set-shapes.yaml | 227 ++ .../slide-management/get-set-slides.yaml | 178 + .../powerpoint/text/get-set-textrange.yaml | 195 ++ snippet-extractor-metadata/powerpoint.xlsx | Bin 12284 -> 13305 bytes snippet-extractor-output/snippets.yaml | 685 +++- view-prod/powerpoint.json | 5 +- view/powerpoint.json | 5 +- yarn.lock | 1844 ++++++----- 12 files changed, 5155 insertions(+), 982 deletions(-) create mode 100644 package-lock.json create mode 100644 samples/powerpoint/shapes/get-set-shapes.yaml create mode 100644 samples/powerpoint/slide-management/get-set-slides.yaml create mode 100644 samples/powerpoint/text/get-set-textrange.yaml diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..a12217796 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2939 @@ +{ + "name": "office-js-snippets", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "office-js-snippets", + "version": "1.0.0", + "license": "MIT", + "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", + "lodash": "^4.17.21", + "node-status": "^1.0.0", + "rimraf": "^3.0.0", + "shelljs": "^0.8.5", + "yarn": "^1.22.19" + }, + "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" + }, + "engines": { + "node": ">=6.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "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" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", + "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==", + "license": "MIT" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "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" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", + "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==", + "license": "MIT" + }, + "node_modules/@types/chalk": { + "version": "0.4.31", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", + "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra/node_modules/@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glob/node_modules/@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/js-yaml": { + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.175", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", + "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "11.15.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz", + "integrity": "sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/shelljs": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", + "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "node_modules/@types/shelljs/node_modules/@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "license": "MIT", + "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" + } + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/async": { + "version": "3.2.1", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.49", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", + "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/charm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", + "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", + "license": "MIT/X11", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "license": "MIT", + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-spinners": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", + "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/compress-commons": { + "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==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "license": "Apache-2.0", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "license": "MIT" + }, + "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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "license": "MIT", + "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" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/end-of-stream": { + "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==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/exceljs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", + "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/fs-constants": { + "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==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "license": "ISC" + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "license": "ISC" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "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==", + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jszip": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "license": "MIT", + "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" + } + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "license": "MIT", + "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" + } + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "license": "ISC" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "license": "MIT" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "license": "MIT" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=", + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/node-status": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", + "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", + "dependencies": { + "charm": "1.0.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "0.2.0", + "colors": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "license": "Apache-2.0", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process-nextick-args": { + "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==", + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "license": "MIT", + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "license": "MIT" + }, + "node_modules/shelljs": { + "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" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "license": "BSD-3-Clause" + }, + "node_modules/string_decoder": { + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "license": "MIT/X11" + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "license": "Apache-2.0", + "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" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "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" + } + }, + "node_modules/tslint/node_modules/ansi-styles": { + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslint/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/tslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "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" + } + }, + "node_modules/typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "license": "MIT", + "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" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "license": "MIT", + "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" + } + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "license": "ISC" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/yarn": { + "version": "1.22.19", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", + "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==", + "hasInstallScript": true, + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "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==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "requires": { + "@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" + }, + "dependencies": { + "@types/node": { + "version": "14.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", + "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" + } + } + }, + "@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "requires": { + "@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" + }, + "dependencies": { + "@types/node": { + "version": "14.17.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", + "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" + } + } + }, + "@types/chalk": { + "version": "0.4.31", + "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", + "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", + "dev": true + }, + "@types/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", + "dev": true, + "requires": { + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "dev": true + } + } + }, + "@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==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "dev": true + } + } + }, + "@types/js-yaml": { + "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==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.175", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", + "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/node": { + "version": "11.15.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz", + "integrity": "sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g==", + "dev": true + }, + "@types/shelljs": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", + "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "requires": { + "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" + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "requires": { + "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" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "async": { + "version": "3.2.1" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "big-integer": { + "version": "1.6.49", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", + "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-indexof-polyfill": { + "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==" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "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" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } + } + }, + "charm": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", + "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", + "requires": { + "inherits": "^2.0.1" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-spinners": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", + "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + }, + "commander": { + "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==", + "dev": true + }, + "compress-commons": { + "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==", + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + } + }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "end-of-stream": { + "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==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "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": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "exceljs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", + "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", + "requires": { + "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": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + }, + "exit-on-epipe": { + "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": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "requires": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + } + }, + "fs-constants": { + "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": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "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": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "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==", + "requires": { + "has": "^1.0.3" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jszip": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + }, + "lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "node-status": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", + "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", + "requires": { + "charm": "1.0.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "0.2.0", + "colors": "1.1.2" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "printj": { + "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": { + "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": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "set-immediate-shim": { + "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": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "string_decoder": { + "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==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "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": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "ansi-styles": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "requires": { + "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" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "yarn": { + "version": "1.22.19", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", + "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==" + }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + } + } + } +} diff --git a/package.json b/package.json index 8650d29c4..6628cb3e3 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,8 @@ "lodash": "^4.17.21", "node-status": "^1.0.0", "rimraf": "^3.0.0", - "shelljs": "^0.8.5" + "shelljs": "^0.8.5", + "yarn": "^1.22.19" }, "devDependencies": { "@types/chalk": "0.4.31", diff --git a/playlists-prod/powerpoint.yaml b/playlists-prod/powerpoint.yaml index 05da11fbd..ba4058e8e 100644 --- a/playlists-prod/powerpoint.yaml +++ b/playlists-prod/powerpoint.yaml @@ -60,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-shapes-get-set-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: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.5' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml @@ -94,6 +103,15 @@ 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' + fileName: get-set-slides.yaml + description: Get and set one or more selected slides. Load and save one or more slides. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + group: Slide Management + api_set: + PowerPointApi: '1.5' - id: powerpoint-tags name: Work with tags fileName: tags.yaml @@ -102,4 +120,13 @@ 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 + PowerPointApi: '1.3' +- 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.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + group: Text + api_set: + PowerPointApi: '1.5' \ No newline at end of file diff --git a/playlists/powerpoint.yaml b/playlists/powerpoint.yaml index cf29f0842..29e2b87a3 100644 --- a/playlists/powerpoint.yaml +++ b/playlists/powerpoint.yaml @@ -60,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-shapes-get-set-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: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-shapes.yaml + group: Shapes + api_set: + PowerPointApi: '1.5' - id: powerpoint-shapes name: 'Insert shape, line, and text box' fileName: shapes.yaml @@ -94,6 +103,15 @@ 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' + fileName: get-set-slides.yaml + description: Get and set one or more selected slides. Load and save one or more slides. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/slide-management/get-set-slides.yaml + group: Slide Management + api_set: + PowerPointApi: '1.5' - id: powerpoint-tags name: Work with tags fileName: tags.yaml @@ -103,3 +121,12 @@ group: Tags api_set: PowerPointApi: '1.3' +- 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.' + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/text/get-set-textrange.yaml + group: Text + api_set: + PowerPointApi: '1.5' diff --git a/samples/powerpoint/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml new file mode 100644 index 000000000..330aa10ec --- /dev/null +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -0,0 +1,227 @@ +order: 2 +id: powerpoint-shapes-get-set-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: + 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)); + + async function getSelectedShapes() { + // 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 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); + }); + } + + async function setSelectedShapes() { + // Selects the first two shapes on slide 1. + await PowerPoint.run(async (context) => { + context.presentation.load("slides"); + await context.sync(); + 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); + shape1.load("id"); + shape2.load("id"); + await context.sync(); + slide1.setSelectedShapes([shape1.id, shape2.id]); + await context.sync(); + }); + } + + async function changeFill() { + // Changes the selected shapes fill color to red. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + shape.fill.setSolidColor("red"); + }); + await context.sync(); + }); + } + + let savedSlideSelection = []; + let savedShapeSelection = []; + async function saveShapeSelection() { + // 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 = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + savedSlideSelection = []; + slides.items.map((slide) => { + savedSlideSelection.push(slide.id); + }); + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + savedShapeSelection.push(shape.id); + }); + }); + } + + async function loadShapeSelection() { + // 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(); + }); + } + + const slideWidth = 960; + const slideHeight = 540; + function getRandomBetween(a, b) { + return Math.random() * (b - a) + a; + } + + function generateRandomHexColor() { + return `#${Math.random() + .toString(16) + .substring(2, 8)}`; + } + + async function createShapes() { + // Creates random shapes on the selected slide. + await PowerPoint.run(async (context) => { + let finalTable = ""; + const currentSlide = 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); + 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); + }); + } + + let currentLeft = 0; + let currentTop = 0; + 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 shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + let maxHeight = 0; + shapes.items.map((shape) => { + shape.load("width,height"); + }); + await context.sync(); + shapes.items.map((shape) => { + shape.left = currentLeft; + shape.top = currentTop; + currentLeft += shape.width; + if (shape.height > maxHeight) maxHeight = shape.height; + }); + await context.sync(); + currentLeft = 0; + if (currentTop > slideHeight - 200) currentTop = 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 shows how to get selected shapes, and how to select and change specific shapes.

    +
    + +
    +

    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 + + 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/powerpoint/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml new file mode 100644 index 000000000..7096e5448 --- /dev/null +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -0,0 +1,178 @@ +order: 4 +id: powerpoint-slide-management-get-set-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: + 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)); + + async function getSelectedSlides() { + // Gets the selected slides and displays their IDs on the task pane. + await PowerPoint.run(async (context) => { + let finalTable = ""; + context.presentation.load("slides"); + await context.sync(); + const allSlidesList = {}; + const allSlidesCount = context.presentation.slides.getCount(); + context.presentation.slides.load("items"); + await context.sync(); + let allSlideItems = context.presentation.slides.items; + allSlideItems.map((slide, index) => { + allSlidesList[slide.id] = `Slide ${index + 1}`; + }); + + if ($("#id-check-usenative").is(":checked")) { + context.presentation.load("tags"); + } + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; + finalTable += + "
    "; + slides.items.map((slide, index) => { + finalTable += ""; + }); + finalTable += "
    IndexId
    " + index + " - " + allSlidesList[slide.id] + "" + slide.id + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); + } + async function deleteSlides() { + // Deletes the selected slides. + await PowerPoint.run(async (context) => { + context.presentation.load("slides"); + await context.sync(); + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + slides.items.map((slide) => { + slide.delete(); + }); + }); + } + + async function setSelectedSlides() { + // Selects slides 2, 4, and 5. + 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); + slide2.load("id"); + slide4.load("id"); + slide5.load("id"); + try { + await context.sync(); + } catch (error) { + console.warn("This action requires at least 5 slides in the presentation."); + return; + } + await context.sync(); + context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); + await context.sync(); + }); + } + + let savedSlideSelection = []; + async function saveSlideSelection() { + // Saves which slides are currently selected so they can be reselected later. + await PowerPoint.run(async (context) => { + let finalTable = ""; + context.presentation.load("slides"); + await context.sync(); + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + await context.sync(); + finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; + finalTable += + "
    "; + savedSlideSelection = []; + slides.load("items"); + await context.sync(); + slides.items.map((slide, index) => { + finalTable += ""; + savedSlideSelection.push(slide.id); + }); + finalTable += "
    IndexId
    " + index + "" + slide.id + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); + } + + async function loadSlideSelection() { + // Sets selection to the slides that were saved. + await PowerPoint.run(async (context) => { + context.presentation.setSelectedSlides(savedSlideSelection); + 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 get selected slides, and how to select specific slides.

    +
    + +
    +

    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 + + 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/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml new file mode 100644 index 000000000..4f3320093 --- /dev/null +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -0,0 +1,195 @@ +order: 1 +id: powerpoint-text-get-set-textrange +name: Work with text range selections +description: 'Get, set, load, and save text range selections.' +host: POWERPOINT +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)); + + 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(); + try { + await context.sync(); + } catch (error) { + console.warn("You must select only one range of text for this action to work."); + return; + } + textRange.load("text"); + textRange.load("start"); + textRange.load("length"); + await context.sync(); + let txtHtml = textRange.text; + txtHtml = txtHtml.replace(/\n/g, "
    "); + txtHtml = txtHtml.replace(/\r/g, "
    "); + txtHtml = txtHtml.replace(/\v/g, "
    "); + let txtExplained = textRange.text; + txtExplained = txtExplained.replace(/\n/g, "NL"); + txtExplained = txtExplained.replace(/\r/g, "CR"); + txtExplained = txtExplained.replace(/\v/g, "VV"); + let finalTable = ""; + finalTable += + "
    "; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += "
    IndexId
    Raw" + textRange.text + "
    Html" + txtHtml + "
    Exp" + txtExplained + "
    Start" + textRange.start + "
    Length" + textRange.length + "
    "; + $("#outputSpan").empty(); + $("#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 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"); + await context.sync(); + if (textFrame.hasText != true) { + console.warn("You must select only one shape with text in it."); + return; + } + const 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(); + }); + } + + async function changeColor() { + // 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(); + }); + } + + let savedTextSlideSelection = []; + let savedTextShapeSelection = []; + let savedTextTextRangeStart; + let savedTextTextRangeLength; + async function saveTextSelection() { + // Saves the range that is currently selected so it can be reselected later. + await PowerPoint.run(async (context) => { + let finalTable = ""; + context.presentation.load("slides"); + await context.sync(); + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + savedTextSlideSelection = []; + slides.items.map((slide) => { + savedTextSlideSelection.push(slide.id); + }); + + const shapes = context.presentation.getSelectedShapes(); + shapes.load("items"); + await context.sync(); + savedTextShapeSelection = []; + shapes.items.map((shape) => { + savedTextShapeSelection.push(shape.id); + }); + const savedTextRange = context.presentation.getSelectedTextRangeOrNullObject(); + savedTextRange.load("start,length"); + await context.sync(); + if (savedTextRange.isNullObject) { + console.warn("You must select only one shape with text in it."); + return; + } + savedTextTextRangeStart = savedTextRange.start; + savedTextTextRangeLength = savedTextRange.length; + }); + } + + 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); + textRange.setSelected(); + 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 get selected text, and how to select specific text.

    +
    +
    +

    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 + + 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 52911b068d87a0be52e98f4848a31e40c68bb094..3cabbe9af5002c8f8207c6a473723aeb885bab28 100644 GIT binary patch delta 7366 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 delta 6368 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 // 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; + 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 function(context) { - context.presentation.slides.add({ - slideMasterId: chosenMaster, - layoutId: chosenLayout - }); + 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); + slide2.load("id"); + slide4.load("id"); + slide5.load("id"); + try { + await context.sync(); + } catch (error) { + console.warn("This action requires at least 5 slides in the presentation."); + return; + } + await context.sync(); + context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); -'PowerPoint.TagCollection#add:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml - await PowerPoint.run(async function(context) { - const slide = context.presentation.slides.getItemAt(0); - slide.tags.add("OCEAN", "Indian"); - slide.tags.add("PLANET", "Jupiter"); - slide.tags.add("CONTINENT", "Antarctica"); + // Sets selection to the slides that were saved. + await PowerPoint.run(async (context) => { + context.presentation.setSelectedSlides(savedSlideSelection); await context.sync(); + }); +'PowerPoint.Shape#fill:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml - slide.tags.load("key, value"); + // Changes the selected shapes fill color to red. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + shape.fill.setSolidColor("red"); + }); await context.sync(); - - for (let i = 0; i < slide.tags.items.length; i++) { - console.log("Added key " + JSON.stringify(slide.tags.items[i].key) + " with value " + JSON.stringify(slide.tags.items[i].value)); - } }); -'PowerPoint.SlideCollection#getItemAt:member(1)': +'PowerPoint.Shape#left:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.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"); + // Arranges the selected shapes in a line from left to right. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); await context.sync(); - - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); - audienceTag.load("key, value"); - + let maxHeight = 0; + shapes.items.map((shape) => { + shape.load("width,height"); + }); await context.sync(); - - console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); + shapes.items.map((shape) => { + shape.left = currentLeft; + shape.top = currentTop; + currentLeft += shape.width; + if (shape.height > maxHeight) maxHeight = shape.height; + }); + await context.sync(); + currentLeft = 0; + if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.TagCollection#getItem:member(1)': +'PowerPoint.Shape#top:member': - >- // 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml - // 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"); + // Arranges the selected shapes in a line from left to right. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); await context.sync(); - - const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); - audienceTag.load("key, value"); - + let maxHeight = 0; + shapes.items.map((shape) => { + shape.load("width,height"); + }); await context.sync(); - - console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); + shapes.items.map((shape) => { + shape.left = currentLeft; + shape.top = currentTop; + currentLeft += shape.width; + if (shape.height > maxHeight) maxHeight = shape.height; + }); + await context.sync(); + currentLeft = 0; + if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Slide#delete:member(1)': +'PowerPoint.Shape#width:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml - await PowerPoint.run(async function(context) { - const slides = context.presentation.slides; - slides.load("tags/key, tags/value"); + // Arranges the selected shapes in a line from left to right. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + let maxHeight = 0; + shapes.items.map((shape) => { + shape.load("width,height"); + }); + await context.sync(); + shapes.items.map((shape) => { + shape.left = currentLeft; + shape.top = currentTop; + currentLeft += shape.width; + if (shape.height > maxHeight) maxHeight = shape.height; + }); await context.sync(); + currentLeft = 0; + if (currentTop > slideHeight - 200) currentTop = 0; + }); +'PowerPoint.Shape#height:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml - 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]; - if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") { - currentSlide.delete(); - } - } - } + // Arranges the selected shapes in a line from left to right. + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + let maxHeight = 0; + shapes.items.map((shape) => { + shape.load("width,height"); + }); await context.sync(); + shapes.items.map((shape) => { + shape.left = currentLeft; + shape.top = currentTop; + currentLeft += shape.width; + if (shape.height > maxHeight) maxHeight = shape.height; + }); + await context.sync(); + currentLeft = 0; + if (currentTop > slideHeight - 200) currentTop = 0; }); 'PowerPoint.ShapeCollection#getItemAt:member(1)': - >- @@ -13028,20 +13082,6 @@ console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); }); -'PowerPoint.TagCollection#delete:member(1)': - - >- - // 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; - - presentationTags.delete("COLOR"); - - await context.sync(); - - console.log(JSON.stringify(presentationTags)); - }); 'PowerPoint.ShapeCollection#addGeometricShape:member(1)': - >- // Link to full sample: @@ -13117,6 +13157,485 @@ return context.sync(); }); +'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 = 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.ShapeFont#color: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.ShapeScopedCollection#getSelectedShapes:member(1)': + - >- + // 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 = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + savedSlideSelection = []; + slides.items.map((slide) => { + savedSlideSelection.push(slide.id); + }); + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + savedShapeSelection.push(shape.id); + }); + }); + - >- + // 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 = 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); + }); + - >- + // 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) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + let maxHeight = 0; + shapes.items.map((shape) => { + shape.load("width,height"); + }); + await context.sync(); + shapes.items.map((shape) => { + shape.left = currentLeft; + shape.top = currentTop; + currentLeft += shape.width; + if (shape.height > maxHeight) maxHeight = shape.height; + }); + await context.sync(); + currentLeft = 0; + if (currentTop > slideHeight - 200) currentTop = 0; + }); +'PowerPoint.Slide#delete:member(1)': + - >- + // 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 slides = context.presentation.slides; + slides.load("tags/key, tags/value"); + + await context.sync(); + + 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]; + if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") { + currentSlide.delete(); + } + } + } + + await context.sync(); + }); + - >- + // 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) => { + context.presentation.load("slides"); + await context.sync(); + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + slides.items.map((slide) => { + slide.delete(); + }); + }); +'PowerPoint.Slide#getItemAt:member(1)': + - >- + // 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) => { + 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); + slide2.load("id"); + slide4.load("id"); + slide5.load("id"); + try { + await context.sync(); + } catch (error) { + console.warn("This action requires at least 5 slides in the presentation."); + return; + } + await context.sync(); + context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); + await context.sync(); + }); +'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 + + // Selects the first two shapes on slide 1. + + await PowerPoint.run(async (context) => { + context.presentation.load("slides"); + await context.sync(); + 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); + shape1.load("id"); + shape2.load("id"); + await context.sync(); + slide1.setSelectedShapes([shape1.id, shape2.id]); + await context.sync(); + }); + - >- + // 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.SlideCollection#add:member(1)': + - >- + // 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) { + context.presentation.slides.add({ + slideMasterId: chosenMaster, + layoutId: chosenLayout + }); + await context.sync(); + }); +'PowerPoint.SlideCollection#getItemAt:member(1)': + - >- + // 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.SlideScopedCollection#getSelectedSlides:member(1)': + - >- + // 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) => { + let finalTable = ""; + context.presentation.load("slides"); + await context.sync(); + const allSlidesList = {}; + const allSlidesCount = context.presentation.slides.getCount(); + context.presentation.slides.load("items"); + await context.sync(); + let allSlideItems = context.presentation.slides.items; + allSlideItems.map((slide, index) => { + allSlidesList[slide.id] = `Slide ${index + 1}`; + }); + + if ($("#id-check-usenative").is(":checked")) { + context.presentation.load("tags"); + } + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; + finalTable += + "
    "; + slides.items.map((slide, index) => { + finalTable += ""; + }); + finalTable += "
    IndexId
    " + index + " - " + allSlidesList[slide.id] + "" + slide.id + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); + - >- + // 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. + + await PowerPoint.run(async (context) => { + let finalTable = ""; + context.presentation.load("slides"); + await context.sync(); + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + await context.sync(); + finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; + finalTable += + "
    "; + savedSlideSelection = []; + slides.load("items"); + await context.sync(); + slides.items.map((slide, index) => { + finalTable += ""; + savedSlideSelection.push(slide.id); + }); + finalTable += "
    IndexId
    " + index + "" + slide.id + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); +'PowerPoint.TagCollection#add:member(1)': + - >- + // 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"); + slide.tags.add("PLANET", "Jupiter"); + slide.tags.add("CONTINENT", "Antarctica"); + + await context.sync(); + + slide.tags.load("key, value"); + + await context.sync(); + + for (let i = 0; i < slide.tags.items.length; i++) { + console.log("Added key " + JSON.stringify(slide.tags.items[i].key) + " with value " + JSON.stringify(slide.tags.items[i].value)); + } + }); +'PowerPoint.TagCollection#getItem:member(1)': + - >- + // 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#delete:member(1)': + - >- + // 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; + + presentationTags.delete("COLOR"); + + await context.sync(); + + console.log(JSON.stringify(presentationTags)); + }); +'PowerPoint.TextRange#getSelectedTextRange:member(1)': + - >- + // 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. + + await PowerPoint.run(async (context) => { + const textRange = context.presentation.getSelectedTextRange(); + try { + await context.sync(); + } catch (error) { + console.warn("You must select only one range of text for this action to work."); + return; + } + textRange.load("text"); + textRange.load("start"); + textRange.load("length"); + await context.sync(); + let txtHtml = textRange.text; + txtHtml = txtHtml.replace(/\n/g, "
    "); + txtHtml = txtHtml.replace(/\r/g, "
    "); + txtHtml = txtHtml.replace(/\v/g, "
    "); + let txtExplained = textRange.text; + txtExplained = txtExplained.replace(/\n/g, "NL"); + txtExplained = txtExplained.replace(/\r/g, "CR"); + txtExplained = txtExplained.replace(/\v/g, "VV"); + let finalTable = ""; + finalTable += + "
    "; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += "
    IndexId
    Raw" + textRange.text + "
    Html" + txtHtml + "
    Exp" + txtExplained + "
    Start" + textRange.start + "
    Length" + textRange.length + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); + - >- + // 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) => { + const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + textRange.setSelected(); + await context.sync(); + }); +'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 + + // Selects the first 10 characters of the selected shape. + + await PowerPoint.run(async (context) => { + const shapes = 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"); + await context.sync(); + if (textFrame.hasText != true) { + console.warn("You must select only one shape with text in it."); + return; + } + const 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(); + }); + - >- + // 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) => { + const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + 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: diff --git a/view-prod/powerpoint.json b/view-prod/powerpoint.json index 6555faa19..b5321196c 100644 --- a/view-prod/powerpoint.json +++ b/view-prod/powerpoint.json @@ -6,9 +6,12 @@ "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-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-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", - "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.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-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 68b61b225..2dddac939 100644 --- a/view/powerpoint.json +++ b/view/powerpoint.json @@ -6,9 +6,12 @@ "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-get-set-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/shapes/get-set-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", - "powerpoint-tags": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/powerpoint/tags/tags.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-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 diff --git a/yarn.lock b/yarn.lock index 610c63562..28e6c5894 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,966 +3,1020 @@ "@babel/code-frame@^7.0.0": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" - integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== + "integrity" "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz" + "version" "7.15.8" dependencies: "@babel/highlight" "^7.14.5" "@babel/helper-validator-identifier@^7.14.5": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" + "version" "7.15.7" "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@fast-csv/format@4.3.5": - version "4.3.5" - resolved "https://registry.yarnpkg.com/@fast-csv/format/-/format-4.3.5.tgz#90d83d1b47b6aaf67be70d6118f84f3e12ee1ff3" - integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== + "integrity" "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==" + "resolved" "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz" + "version" "4.3.5" 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" + "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.yarnpkg.com/@fast-csv/parse/-/parse-4.3.6.tgz#ee47d0640ca0291034c7aa94039a744cfb019264" - integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== + "integrity" "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==" + "resolved" "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz" + "version" "4.3.6" 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" + "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.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9" - integrity sha1-ox10JBprHtu5c8822XooloNKUfk= + "integrity" "sha1-ox10JBprHtu5c8822XooloNKUfk=" + "resolved" "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz" + "version" "0.4.31" "@types/fs-extra@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-3.0.1.tgz#78293a68aad3d866751e8fcfd64d7dc9d0117476" - integrity sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY= + "integrity" "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=" + "resolved" "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/node" "*" "@types/glob@*": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== + "integrity" "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==" + "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz" + "version" "7.1.4" dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/js-yaml@^3.12.0": - version "3.12.7" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.7.tgz#330c5d97a3500e9c903210d6e49f02964af04a0e" - integrity sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ== + "integrity" "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==" + "resolved" "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz" + "version" "3.12.7" "@types/lodash@^4.14.175": - version "4.14.175" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.175.tgz#b78dfa959192b01fae0ad90e166478769b215f45" - integrity sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw== + "integrity" "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==" + "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz" + "version" "4.14.175" "@types/minimatch@*": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + "version" "3.0.5" "@types/node@*": - version "16.10.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" - integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== + "integrity" "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz" + "version" "16.10.3" "@types/node@^11.10.5": - version "11.15.54" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.54.tgz#59ed60e7b0d56905a654292e8d73275034eb6283" - integrity sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g== + "integrity" "sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz" + "version" "11.15.54" "@types/node@^14.0.1": - version "14.17.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.21.tgz#6359d8cf73481e312a43886fa50afc70ce5592c6" - integrity sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA== + "integrity" "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz" + "version" "14.17.21" "@types/shelljs@^0.8.3": - version "0.8.9" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.9.tgz#45dd8501aa9882976ca3610517dac3831c2fbbf4" - integrity sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw== + "integrity" "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==" + "resolved" "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz" + "version" "0.8.9" dependencies: "@types/glob" "*" "@types/node" "*" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - 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.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - 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.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba" - 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.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -async@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -big-integer@^1.6.17: - version "1.6.49" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.49.tgz#f6817d3ea5d4f3fb19e24df9f4b1b4471a8328ce" - integrity sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw== - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - 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.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - 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.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - 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.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - 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" - -chalk@^2.0.0, chalk@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - 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" - -charm@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.1.tgz#68566a7a553d4fe91797030dd1852d0dd6efa82d" - integrity sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0= - dependencies: - inherits "^2.0.1" - -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= - dependencies: - restore-cursor "^1.0.1" - -cli-spinners@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.2.0.tgz#85078737913b880f6ec9ffe7b65e83ec7776284f" - integrity sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - 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.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -colors@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - -commander@^2.12.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -compress-commons@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d" - 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.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -crc-32@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" - 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.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007" - 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.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -exceljs@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.3.0.tgz#939bc0d4c59c200acadb7051be34d25c109853c4" - 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.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= - -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - -fast-csv@^4.3.1: - version "4.3.6" - resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-4.3.6.tgz#70349bdd8fe4d66b1130d8c91820b64a21bc4a63" - integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== +"ansi-regex@^2.0.0": + "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-styles@^2.2.1": + "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" + "version" "2.2.1" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"archiver-utils@^2.1.0": + "integrity" "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==" + "resolved" "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz" + "version" "2.1.0" + 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": + "integrity" "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==" + "resolved" "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz" + "version" "5.3.0" + 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": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"async@^3.2.0": + "version" "3.2.1" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"big-integer@^1.6.17": + "integrity" "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==" + "resolved" "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz" + "version" "1.6.49" + +"binary@~0.3.0": + "integrity" "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=" + "resolved" "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "buffers" "~0.1.1" + "chainsaw" "~0.1.0" + +"bl@^4.0.3": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"bluebird@~3.4.1": + "integrity" "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" + "version" "3.4.7" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"buffer-crc32@^0.2.1", "buffer-crc32@^0.2.13": + "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + "version" "0.2.13" + +"buffer-indexof-polyfill@~1.0.0": + "integrity" "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" + "resolved" "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" + "version" "1.0.2" + +"buffer@^5.5.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" + +"buffers@~0.1.1": + "integrity" "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + "resolved" "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" + "version" "0.1.1" + +"builtin-modules@^1.1.1": + "integrity" "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + "version" "1.1.1" + +"chainsaw@~0.1.0": + "integrity" "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=" + "resolved" "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "traverse" ">=0.3.0 <0.4" + +"chalk@^2.0.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^2.3.0": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@1.1.3": + "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + "version" "1.1.3" + 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": + "integrity" "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=" + "resolved" "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "inherits" "^2.0.1" + +"cli-cursor@^1.0.2": + "integrity" "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "restore-cursor" "^1.0.1" + +"cli-spinners@0.2.0": + "integrity" "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz" + "version" "0.2.0" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"colors@1.1.2": + "integrity" "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" + "resolved" "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" + "version" "1.1.2" + +"commander@^2.12.1": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"compress-commons@^4.1.0": + "integrity" "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==" + "resolved" "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz" + "version" "4.1.1" + 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": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"core-util-is@~1.0.0": + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + "version" "1.0.3" + +"crc-32@^1.2.0": + "integrity" "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==" + "resolved" "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "exit-on-epipe" "~1.0.1" + "printj" "~1.1.0" + +"crc32-stream@^4.0.2": + "integrity" "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==" + "resolved" "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "crc-32" "^1.2.0" + "readable-stream" "^3.4.0" + +"dayjs@^1.8.34": + "integrity" "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + "resolved" "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz" + "version" "1.10.7" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"duplexer2@~0.1.4": + "integrity" "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=" + "resolved" "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "readable-stream" "^2.0.2" + +"end-of-stream@^1.4.1": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"escape-string-regexp@^1.0.2": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"esprima@^4.0.0": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"exceljs@^4.3.0": + "integrity" "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==" + "resolved" "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz" + "version" "4.3.0" + 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": + "integrity" "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + "resolved" "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" + "version" "1.1.1" + +"exit-on-epipe@~1.0.1": + "integrity" "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + "resolved" "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" + "version" "1.0.1" + +"fast-csv@^4.3.1": + "integrity" "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==" + "resolved" "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz" + "version" "4.3.6" 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.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= - 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.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - 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.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - 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.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - 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.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - 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: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -is-core-module@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" - integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== - dependencies: - has "^1.0.3" - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - 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.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" - integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= +"fs-constants@^1.0.0": + "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + "version" "1.0.0" + +"fs-extra@3.0.1": + "integrity" "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "graceful-fs" "^4.1.2" + "jsonfile" "^3.0.0" + "universalify" "^0.1.0" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"fstream@^1.0.12": + "integrity" "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==" + "resolved" "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" + "version" "1.0.12" + dependencies: + "graceful-fs" "^4.1.2" + "inherits" "~2.0.0" + "mkdirp" ">=0.5 0" + "rimraf" "2" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"glob@^7.0.0", "glob@^7.1.1", "glob@^7.1.3", "glob@^7.1.4": + "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + "version" "7.2.0" + 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": + "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" + "version" "4.2.8" + +"has-ansi@^2.0.0": + "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" + "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ansi-regex" "^2.0.0" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"ieee754@^1.1.13": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"immediate@~3.0.5": + "integrity" "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" + "version" "3.0.6" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + 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": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"interpret@^1.0.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" + +"is-core-module@^2.2.0": + "integrity" "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "has" "^1.0.3" + +"isarray@~1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"jsonfile@^3.0.0": + "integrity" "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz" + "version" "3.0.1" optionalDependencies: - graceful-fs "^4.1.6" - -jszip@^3.5.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.7.1.tgz#bd63401221c15625a1228c556ca8a68da6fda3d9" - integrity sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.groupby@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" - integrity sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash.isfunction@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" - integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== - -lodash.isnil@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" - integrity sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isundefined@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" - integrity sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g= - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -"mkdirp@>=0.5 0", mkdirp@^0.5.3: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - 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.yarnpkg.com/node-status/-/node-status-1.0.0.tgz#7906a7c47a6587d03496bf74ec634abaa03f8e80" - integrity sha1-eQanxHplh9A0lr907GNKuqA/joA= - 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.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - -pako@~1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -printj@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" - integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - 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: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - 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.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdir-glob@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4" - integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA== - dependencies: - minimatch "^3.0.4" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -resolve@^1.1.6, resolve@^1.3.2: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - 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.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - -rimraf@2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -semver@^5.3.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - 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.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + "graceful-fs" "^4.1.6" + +"jszip@^3.5.0": + "integrity" "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==" + "resolved" "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz" + "version" "3.7.1" + dependencies: + "lie" "~3.3.0" + "pako" "~1.0.2" + "readable-stream" "~2.3.6" + "set-immediate-shim" "~1.0.1" + +"lazystream@^1.0.0": + "integrity" "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=" + "resolved" "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "readable-stream" "^2.0.5" + +"lie@~3.3.0": + "integrity" "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==" + "resolved" "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "immediate" "~3.0.5" + +"listenercount@~1.0.1": + "integrity" "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + "resolved" "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" + "version" "1.0.1" + +"lodash.defaults@^4.2.0": + "integrity" "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + "resolved" "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" + "version" "4.2.0" + +"lodash.difference@^4.5.0": + "integrity" "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + "resolved" "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" + "version" "4.5.0" + +"lodash.escaperegexp@^4.1.2": + "integrity" "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" + "resolved" "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" + "version" "4.1.2" + +"lodash.flatten@^4.4.0": + "integrity" "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "resolved" "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" + "version" "4.4.0" + +"lodash.groupby@^4.6.0": + "integrity" "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + "resolved" "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz" + "version" "4.6.0" + +"lodash.isboolean@^3.0.3": + "integrity" "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "resolved" "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + "version" "3.0.3" + +"lodash.isequal@^4.5.0": + "integrity" "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "resolved" "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + "version" "4.5.0" + +"lodash.isfunction@^3.0.9": + "integrity" "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + "resolved" "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" + "version" "3.0.9" + +"lodash.isnil@^4.0.0": + "integrity" "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" + "resolved" "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz" + "version" "4.0.0" + +"lodash.isplainobject@^4.0.6": + "integrity" "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + "version" "4.0.6" + +"lodash.isundefined@^3.0.1": + "integrity" "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" + "resolved" "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz" + "version" "3.0.1" + +"lodash.union@^4.6.0": + "integrity" "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" + "resolved" "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz" + "version" "4.6.0" + +"lodash.uniq@^4.5.0": + "integrity" "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + "version" "4.5.0" + +"lodash@^4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"minimatch@^3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimist@^1.2.5": + "version" "1.2.5" + +"mkdirp@^0.5.3", "mkdirp@>=0.5 0": + "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + "version" "0.5.5" + dependencies: + "minimist" "^1.2.5" + +"node-status@^1.0.0": + "integrity" "sha1-eQanxHplh9A0lr907GNKuqA/joA=" + "resolved" "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "charm" "1.0.1" + "cli-cursor" "^1.0.2" + "cli-spinners" "0.2.0" + "colors" "1.1.2" + +"normalize-path@^3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"once@^1.3.0", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^1.0.0": + "integrity" "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" + "version" "1.1.0" + +"pako@~1.0.2": + "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + "version" "1.0.11" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-parse@^1.0.6": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"printj@~1.1.0": + "integrity" "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + "resolved" "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz" + "version" "1.1.2" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"readable-stream@^2.0.0": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + 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": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + 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": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + 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": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@~2.3.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + 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": + "integrity" "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==" + "resolved" "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "minimatch" "^3.0.4" + +"rechoir@^0.6.2": + "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + "version" "0.6.2" + dependencies: + "resolve" "^1.1.6" + +"resolve@^1.1.6", "resolve@^1.3.2": + "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + "version" "1.20.0" + dependencies: + "is-core-module" "^2.2.0" + "path-parse" "^1.0.6" + +"restore-cursor@^1.0.1": + "integrity" "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "exit-hook" "^1.0.0" + "onetime" "^1.0.0" + +"rimraf@^3.0.0": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rimraf@2": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@~5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"saxes@^5.0.1": + "integrity" "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==" + "resolved" "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "xmlchars" "^2.2.0" + +"semver@^5.3.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"set-immediate-shim@~1.0.1": + "integrity" "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + "version" "1.0.1" + +"setimmediate@~1.0.4": + "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + "version" "1.0.5" + +"shelljs@^0.8.5": + "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + "version" "0.8.5" + dependencies: + "glob" "^7.0.0" + "interpret" "^1.0.0" + "rechoir" "^0.6.2" + +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" dependencies: - safe-buffer "~5.2.0" + "safe-buffer" "~5.2.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" dependencies: - safe-buffer "~5.1.0" + "safe-buffer" "~5.1.0" -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= +"strip-ansi@^3.0.0": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" dependencies: - ansi-regex "^2.0.0" + "ansi-regex" "^2.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +"supports-color@^2.0.0": + "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + "version" "2.0.0" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" dependencies: - has-flag "^3.0.0" + "has-flag" "^3.0.0" -tar-stream@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== +"tar-stream@^2.2.0": + "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + "version" "2.2.0" 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" + "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.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== +"tmp@^0.2.0": + "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + "version" "0.2.1" dependencies: - rimraf "^3.0.0" + "rimraf" "^3.0.0" "traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + "integrity" "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + "resolved" "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" + "version" "0.3.9" -tslib@^1.13.0, tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +"tslib@^1.13.0", "tslib@^1.8.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" -tslint@^6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" - integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== +"tslint@^6.1.0": + "integrity" "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==" + "resolved" "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" + "version" "6.1.3" 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.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -typescript@^3.3.3333: - version "3.9.10" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" - integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unzipper@^0.10.11: - version "0.10.11" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" - 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.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -zip-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79" - integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^4.1.0" - readable-stream "^3.6.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": + "integrity" "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" + "version" "2.29.0" + 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": + "integrity" "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz" + "version" "3.9.10" + +"universalify@^0.1.0": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" + +"unzipper@^0.10.11": + "integrity" "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==" + "resolved" "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz" + "version" "0.10.11" + 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": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"uuid@^8.3.0": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"xmlchars@^2.2.0": + "integrity" "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "resolved" "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + "version" "2.2.0" + +"yarn@^1.22.19": + "integrity" "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==" + "resolved" "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" + "version" "1.22.19" + +"zip-stream@^4.1.0": + "integrity" "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==" + "resolved" "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "archiver-utils" "^2.1.0" + "compress-commons" "^4.1.0" + "readable-stream" "^3.6.0" From e0fbbbff1a2b1ffcfe1bda2a5a31993d043b02f7 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 22 Dec 2022 15:16:19 -0800 Subject: [PATCH 136/336] [PowerPoint] Rearrange metadata (#741) --- snippet-extractor-metadata/powerpoint.xlsx | Bin 13305 -> 13273 bytes snippet-extractor-output/snippets.yaml | 537 ++++++++++----------- 2 files changed, 268 insertions(+), 269 deletions(-) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 3cabbe9af5002c8f8207c6a473723aeb885bab28..3a5d43f3a2c2f7b303e9d53059fc6fcd2d5ddfdf 100644 GIT binary patch delta 5506 zcmY*dbx;(J@;|yy`anQ9Is}eGKvIq{PCU9B>28oZ0qGL%NTs{`;NVCR5Cuu;l#`TD zT9N1X&70qQzx`upXKQw5KeM~Dmk#p|4SHlG_&3OuT-f$rEGd1g<7d zrAlPCD1|c2$iaFJ>X*UZE!O&jl*Y%z-?0x3zt&rd1?aftl`h=}XzdW=2d5jicJ6KQ zO@W%eF*zFOAk#nfYS${7i;O{YecVU-e@Xzm(&8vN=xk2usIew-=+AZwXdLtr?RzTw zm)&FPwZSdWYjU#>(`A**dKps63JEG%p=9xIp-Gv0aN#qvmy4o>i0UBFN3#dLzT zbp|%%D*_YSac@!vGexwIVxI5F)zl#yChe<~5q&Mjw*5zUVRY>HY zCyz&n@RlhaP_w>k5GVTde4JtU!$rJQ6gFn^fF?qL`jJv=fGN}YdXLmd_&NSJso+wh zC@oFhA26LBdBMX4H*DMjtdj&yr9j)hAgkBLNH?VH+D$bBk9CvPiwM_O%m5`^2S z*bkiUctUbt(}6)x@tm-3Y~k}c)&wM?y_Voyi*#LH?P zgFpK3{h*`Ue{@E*lEdcKvFwBfMDX^a$WsVG;-rjFV&a&--T;TbCChO~2}_Mm>UjzQ zmYWn=K&zVLQi{PxsKdyTNQS!=*Ue_N(3FLlIs<*^26~8kp*r41A56jFhH2rg9^9K0L z>j@r~Aerk6>n6h>7imBSSD`fPve9B<=;{&8V|#@eB=B3=9Vb04$%g3{q9{t3r z_3OqhG$F94!)7Go0Lb8ikPXL>VP^H+f9Dv%$a8^zbaH9}C z=TjkY9@mlMq+ zi&t!md7r$z%wDbs@92?E_hkGr#Ni5u`dFK0Ox&-%0AH{)&w9|mk;TL087|wFg z*o=BCvdc%M=7z4Wch0UY*h6`|Jkm;0^>sio%eAb;7X*8hMGpVF-WNToX}*j#9DEPg zk~XXb1{dPU=7!qdcklID0sw%Un}0KOwu?KP1of+W`U`*`Z*49aJ5ep?ImC?UI-R*O z71LJV;)G)dR=&E)0jeK3>`GLd=OW)CkeT1ty^ZQE!v1u>c#%^&KYBU4era}d+WvO= z_mg+)7Z=xuXTC~#dE%PQi{f?|3l7um+1sW!TV^+5=9##ho;t&yUy;Xe7(KKXABz@Z z(idJXAe^gK?%eq%=Wfwh=PKK4@LT{>G-py&ZcGQJQXi(Xt5p7Z(JAyhx299;cQ8^2 zcuU$gv`SM(i=L5Yp8gap8^N_``@-Di@df@Kufp_6F-#x^V4HL*{~se6gU**y1l+5= zO&&|G{Kbf~iEmfcTTNRss1pLVTZXm1xOGbkABp&)_-$&cb@1x7s5WOB54pFK%18$> z#YT$|!KOK&>91aA+7uyzjCi1o)ioWbYC!6Wgk>+7K{fOf2S?*E^M&jki2P8^I=? z<(X^B(@RTLCbLi<)p#uBU8aBOC3PXLL&Pan)%5kT_dsgP+8AGyUgi}g>7dvtpN4)dupi0QoeQYmU|*5-rI_l8O5N4* zfYy$m4jJzfu}w!=xK_w@K1rT?&AjB4u7_&UU}Jf6YExY`FMPzlAfqy3om1I9$DPa@ zz(G+#EjR=%2 zf5267)m3CKEl(b~?Lt*CMt`?31%6!*FQ_V?PmDSubt+JjTSc!Gr}_Je9&eI%DLtgt z+_`;6k7BC50IacirfdVPtB^aN=d<|>EQgK=c-ETvwC^&^o_js}^E9g-cRexHB zWw+K3#kYxbS-evjNSFJ9_d+xuqZ8@uDBLfp?*4wdm>=d%=k@_fJ~T&kspeXk!TCgX zQJDEXd30)ful@b-RsO`G$NfC{%tP!PktVITj8MicV#&T4pM9miHAseDOsXNxxsp?@uN@nk3a_!3<_GSwh zEluCeKK*W?)pp{drS`#nljzCf5pMaVL}U2uHAmWhVT80>_&qmIE5aU z`3}xwEN^ml{li9*rRRzMECF(BRXHDzjy&@;mQg>E*tpKP@l=-sF?bE&d`q&xa6@N4 zslo0WO+0;E+5Nsr-JV9(M2_lC)mZ$jB6LHeA@1aWwmvd;ici(sicd$ZMb#$uW4|5O ztA!t<^DesmPm-q(>;laS)*PO#mCdL#QD@z;s-ss+Uh z{k%dxzx(RxH@TS8+pr!=>aW0GcgzQ*)1G>7Pht~TBvTdr=aRG(d=@m)h6lp4GxP?Vd7;;;sbL_)wM25%oPv2S**ripud=c`_ zBp0zeKSsMXICywP1TqW8(XEzT-d00kxU*{&QTD!0&*OI{^efq$DY($G^~WZv^eO)WVx7&N=V8 z1Ucp{^?Ih&_DejFIU5%eKEi+aV>?e1*NB${ zqYplkyzf*A2qnf%B$7cY7PUJBu+9X?G46{TsjRz8Xdcn8Ui=RPpbIJE)F!HS%e`;o zHBR*cCHV`Um&EvqFy)We{zCi=Oi7wTIACi!aw@4v(k=sq%#u_y;bq$nO*v9|oZ$E3*l-Y{VtGQhasiJG@>v`#Dv0sh5cIB>FZd zK_(#)p!K`*qZz-92RpK3rlFcx8!Vf*)+fk3_lp4Q3|3H6j2c?b422jWl}ODBMh}QuiXzi#?oF^4 zxrrFQq*XHcnxibj`NoUZSAIAU+Q;J*z09JWhu{of*RAvXQ}uq8qlR~$y}yeyDW!`@ zZcB!)#K=foge*DkWkRI)?x;lgn+B#-{AIv~)rjLPE`CxLoy;SbpoR1=%CgPtmx`U5KEsrxlT z)Vt0_3=5>6c>%|*PlqND^+81QKS7@v;}GxSo13*4TO{w2Q)^C3U%2@_ysvm%C-7i6 z_mhdA^4&dn?#0!}5)L_IPZkia5afxxU#_#QrQ(svBX~8*HjI|GN?1Y}Cy}q>WCcWT z!h~GOmf>@v=-bvkw0e;`g>;zeD1R1%kJk-myMDsA)~r&s&45#TR|IC(V(S1=n06&#mx6p|;(C zbLURX4M8&(TQ?EV8c?hkOb7tzlLG*Z0MwcUGxC+evy>?aZ5PimXVKfW@n4(q~ zq^7O|MygkM5m3N5zqsR@@nldx2YprYI`F}#$<30BLx!5G;r&pP%?yw%vq)dfsN~%r zpGdCOm>VYaF_Iml?l9ifEMm@PL!29d%*;b;q6f^2Z=^s3RrQ-cWOm1Ub#;aXkP%O$ z^HGLP#h5sQjrG=)Mb?Ib*WjI331iWu&58z^PEU$uG1?KGSCMJPwhN5mW#vqS)JaWFL1E+gXmRZ6)84rU)D*_ zP(q|=7-3@LhdF5!$Z?Q*@JO=rCYgv1CsF6gL|E*{nD><%E#ifzx4&30haS=*r#;{L zITn*U78LvW*}%gHo*|@g`&l75Y0UKNB5#d3Zl{;v)`i>k@)_j47T&RDUa@bn$}Tnj z096y^<@%hB$u8D^+g*Y(m5rO-WCwqe{`|7SCX%xF?iuo~sxsOR(B9y;%&p0*%bQ#> zYpXK)OwiAkNwjnCytK#K_Cu6C@*0!O9gP9n&)xs9^PRD8rTytuU-Bo8#56w|OEt)I z_O1L>5=KvITzJQ+^*OG8@RoG%9{(^hcsSva)hj!&I zTwot@)b)G0vNy`gE;?Ot#2Or~#Q41`N<4*ndfIA2uS~TR{-W^ah6sRqNCs@q1XGa` z_YjJAHJ1qp5FoXmzJoAEt&-fRehALw*OyUQ3?Ip3Cr2=@+IY9=zq!Yoz5J)ksdEMx z?SVai8zOt2=Gtwje?s&ny>*N(n^%xf)Y*9VS+a#;LSQua7B&M{CAGN?0FEZ?Rco;D zJ5zneNLz(ch*9!>&w|J<1bMIwB3xl!G890L0Y5jUb7Wx)n``^UH@4n;PYxOgKl7cl zxAo3ZtNE(ICAdb%3^03JZN%cw`svy>HY_!&m>4Gp?7c&Kfv1as$ z!B#jU!qf`|)MXysB4CZOt;zpdf-Ak1QcWW4s8S{Ymgq8`Ku-vD=7zQyj~%o<`4ugv z^jkc2GHX0*GUGA*!%4bh;%%S&o8%2pGp(>2>3`mn5fB{$PSgxUl{>hxD*TSZovx0C1`=-ZY}NN``WfY*&o|l1$_qP1`{YcXhjm@|ooyG{CYR92M#Bb~dA?#eI)gEs zpW;fizw4O0icO))%3~a?cR_jL6U}2~(v@{mxGb*RA`MV);^VG&e7)jW7ot-sfyArn zM${&in^C9QIyA*@aysFRdq9`*L7hf?8e3>Gg_0p49gf7aqS4li-Sg_X2SipRSEAT3)bZ?qQ}vst_My+Iz|B*aoL zVr2joEv*`6BefFk*fFl1W=3Tvx%G+>Ur+Aywldl}qWVwQtUsO{M8f`*d>IBStX+#37}R z%~^!|AL?mh2wpE>gn5WEId6YO+{8wEpv16w$cO-!gh$OD+Lgq4E>nYdTJy|XNWQ(E$DQn^1Pyz)=sZ=^H+;$my)|^+3Y8z8ne`9j z*4h_?=unu{Ow~?}O`3euHA>J43%N6}7~Q#&KI5teug_+S%=Z|HmQfV)j0m2ogsWi1 zJSoxz>E{~@Ho|&qO~GqysSdfI=k1EH26as=>F*R4v6V+>^M}I7cUWX~TrUJrUns0= zx#3{}0E|pXTU>g?O58FpVfYEh)l1GbS$sy?*FEgt^Q&j0p-mBXTPojQ$7!u(weGih znW5I_>*u8aw?v-0GSF{eA#U>R>*^8tXO3>M>T{WsS?~V@g1q%CgVLO%DWQCW& za7h)(K+2PpU+F?YOiHCH;D!15$X%*V%pnz>IrWV+8Ji&lXXkzj+!l}1>$RS5-pP%` zkevMcFuAo}b$O7;DA^jg^bk8g&w~6w*iIu;K=s_uIcaaK@z|NkPL5Na?Qlw(Em7P@ z9}2FsjO-+k?h|=y{qXVc<+#o2gDNvyGfaW3G1}rp`=aVGQTUv)E5Y$`?IZT<_q}R@ zc8!Iip2q_IUrm z<1Yqm#P3vDwhT=pXmsRc6Q?A9m)-VpoOw7%e&N0C2mlwi zf00&}HU6PynQDQ5kC5c=Qaz0AznbPNPV#!6(t=$O9G<5!2b!(g^XyCNKeNAzK&`KE z*mY7Mzmiv^o{juNvcNVfgcmbDws<}iipVn$f6pdo;Xisv+82#nM-&au=w=O$>%!8m9HdyTsOdg~Ho{a_fj zD8_>5`%AY$9Ai}9c7w@i3!}n z@ilI~dR5jW;8%@?0002b&;Mr083v9kyoB;i#MUStN)qQm4!J3n0hHCjfko1^g-6Gb z1NC`p!Ayw#QC;H>-OG!<@eRTd7JS|$sbPI?TQYC`Z5mr`Vq@< zwv}B}m~IYD?1nncw80$RIEEwZw#63%t>Krr8Vb0$mnL$LzK0Bl+|)077#hDIEc-(7 ze=6iczT&CM#~Ju72@2+$BPAPlJ$jV$u#phxjDYlnc)0^Wb?nAq+hQ6i{=!|1oPVhc27P%g z#k7c7p5X`>O87FD`0_{w5Nr)7x(8~+HYQ4q*?Yz0G6(vSLB*QC5@n84i5bFp?8`|n z=$(%*+**IPoz?#<0d!x8zZFP$6kp!t`;7^=FHk=3iu*QxTR*_OUG z9EP9;ByX2D|Ow6x8cjE8mNPj(8)ta>|$JM?s-l1=)6@Pz+E#S(rT3>9=4}^Q82!BU{^F zTq1svB_WYqu#C4g5dmRqcW`nN;V*d1i)3>it|zULouW|07kJVIu`C2Wu$D4zzASj> z;zO49gK_m1j%(;%B}7~MZmHp2F4%QvLq6ev8AuG#_x9r(pQGiM7Fu4a(BAn0{LE|| z6IJdA)fG6b7)^KOGirv)zA6=u^$pS{3(_V{tGdXnI0pk`y&FDGG4^inBnXsGjpMS9 zD~U(5^W`JB_r`&uX&%_&R?uGw0>jk;rMy#sGdct^gDWrkyH-1cY`ay=m=)K>r;WVzYLd!l~Si*hS zc~#D`@^iqv#8bcYY26}+LA*KZ2tw_^F>%CA*n4lTie9Zqjkh*tE?7ULso<70=W;^J z8|YAH<5j}u7u{v=9;KR+ke(|vH{afD2iVs4VwbOLw-fk@XMh7eByG%wl;^rdAj=6i zWmEVpr6F3kXUfj|ALp6pB)OorQO-$Z%5|;lxUdtb+I+d>V85Ma? zT#TL9UT&oK&q(@(EGJ<_h&RF?zV%^0jlNk@m6=!G)36(PWhunKFx1A!q&}_1^HE0M zm+f+1mJP3dauV{KE+zBs>64^Q|0^3V;Yb6pR;}7~JbG;#6i0@lz#;Xoerrhg!cX0nAjZMm2 zuI2^USf~{C$WalANooZtQb#i%CYTjmOqyRD(vS!BXj6;WbX{G}0w>Z#W;RNwtz*Ipl_x8Xr`_+7RI?R6jj>3^YXSwcU0w zUetcbHnNRkgX}aKLM8+HBLM1BQH;tGEm>P^)UpaUgiH}x-hLM3vYTTX!|1qJbEcHD z>s@zYcbRdl%iV(sFwbBnGjpY-tw=r=x25ZvP}o|KIO6VdsURmu;%;ZDBuCQk(p<6$ zW;t|}?`}2xh`9Ypfe5&Wycu}E_H_Gq#D0Iq`@^Qm!|77A3F4mR>g#3?*+iG``Q|Rm zMAy^9%?X`Yy_bln;08mI>Bi4KmR~PZzoWjq-jaQ?B`%;Of}sA$UCHyMH^=dIi!8-i z_|b@S;$ligak{+OX?Y+$N|7XD)k(xc?wrH7Y`MA@M1!#9?(Hp*7j=6-PQiSPFEdcx z;>X&6Dy};kY#a%(W{GB#FUXKgs1a6@pj8JTR6Jt)(~CNeCIv>dNN~a#?Zp3$er!?iH~FnuGm4z zCfLm^k0nX zFJwAJvRxrT_zW#rEA_wP5QdwtT;b+*A~ZXSI3^Buvw1p_3vCmyKwv9(S(fYshQ(H?Y+!qwT(~Kc3fT67~i~N!f$k)ZgYkWe7dd5Vi`Cq}$ zWnXWFQjX;bX;0yeW(-0n!i3?dq6)scP0%y8pRFhLO4mz_2ktQT@`{WWb$Y!RtSMjG zR&9RS1seGq$139+S$OM6E5FoGXB1JtMI(_=1X1i9z1&7l%p`{x1&2O9$7k>(yEdYN zwb}@!xT*lPX7yEjY11R?sOaEiOz63P{${ceQfCU<{dPgg$&Fb^002IOVv;60vKcgS zzpvtkGziEo^Yt^g*a^RH)@=9D6$sDk@Jl=vSf0}PFM%O4BYg>K{ z)edB%NsYX7FTcV?eEzDx6A)rD9UdUjP>%F(+e_hymsS~WpnIjhj9#HV3;P7Z z$QDKA>Fc@kg(WGiG0<`&m<+g)EmVzBe_l<6CEXMnQ=%oFYPA?kw6k|eL@BxTVz);B z;i?;)#6`b~b++9nR)`abB^@On8|Atl25c57wfL1q*oGJ`GM(12aYx*xDY3%TsTdR_sadTPQKesDz|&xx z{ekV!E3*hz^NZ{1phE$%cp^VGf0}pl($0CY?5gK3SFc>hw?k8xU{>>Ul_oFUO6DiA6p7J~g6&@%9YifQx_QafpNmYc4-Nx9>smw!l#z{23oKq*J)O&c;9}OUIOMD% zS|RXp9HFMRs&U7O;>U8J4o6&0X}37w@jBW8>@A)=`7?gwk+7?R1GJUe7iI+CvY%}M zE4cYP)OJ6TU7+rA3{`TuW>K`@xOaCOfJY*@&@v8rwtN$$jj& zAcI+2jjUKJ4Zxd_2bo;psnp)4x7&(0sMaU#F37IV2Vs1~Ri5~u#)`nf^wMIuKxcVX$_ezP1 z{vlrhhKi6P&55=Gxhe2zN10AgnROm;3^hVai*MuRF5h}$P9rv4T5aFlG>v1^Qi{^!=q!BEDOeu7D1eohu`{spX(p zbKMS4Q{t_IPnk;BPq7Mj>x%JZn=wM{;5}%u*rb)N-{gkI%l>(y6=Yp@u}QME7vkLk zP@XEYXm@=u8*}>-%lwH1DTPH^=LN#SL|>(tCaMc(VL?F{L3(*f!%r}tWrqSXnce7; z8_`mX-V$c9{`#?PU-8C9iNEd9Zzg^YKRh8itKI2K`)-1}PqO7HT0eQpFkz$_Y0zd0 z>nyiyO(wKiD%e8>8wPv9?~WRsdV8cg?9s!4Hc>onYKZdYl+lu;TAnIbT?e#@9G3{vkVw?33sN$pM#>luBgL!2*o_O4ht5D>8v{I?xzQ-JVXbZw zzrPQt$LFN+I9Z@7$n zXGaxeK=Lw>BRl^QU6_#$%rr<00YaL86#@hW0I>b1UlILZFMwnuuYe>fIXlu>KpbTj OStY=XdBO89jsF5d3~-46 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index f87d58897..69dc206a0 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -12888,6 +12888,200 @@ console.log(`Successfully set end date and time to ${end}`); }); }); +'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 + + // Arranges the selected shapes in a line from left to right. + + await PowerPoint.run(async (context) => { + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + let maxHeight = 0; + shapes.items.map((shape) => { + shape.load("width,height"); + }); + await context.sync(); + shapes.items.map((shape) => { + shape.left = currentLeft; + shape.top = currentTop; + currentLeft += shape.width; + if (shape.height > maxHeight) maxHeight = shape.height; + }); + await context.sync(); + currentLeft = 0; + if (currentTop > slideHeight - 200) currentTop = 0; + }); + - >- + // 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 = 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); + }); + - >- + // 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 = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + savedSlideSelection = []; + slides.items.map((slide) => { + savedSlideSelection.push(slide.id); + }); + const shapes = context.presentation.getSelectedShapes(); + const shapeCount = shapes.getCount(); + shapes.load("items"); + await context.sync(); + shapes.items.map((shape) => { + savedShapeSelection.push(shape.id); + }); + }); +'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 + + // Gets the selected slides and displays their IDs on the task pane. + + await PowerPoint.run(async (context) => { + let finalTable = ""; + context.presentation.load("slides"); + await context.sync(); + const allSlidesList = {}; + const allSlidesCount = context.presentation.slides.getCount(); + context.presentation.slides.load("items"); + await context.sync(); + let allSlideItems = context.presentation.slides.items; + allSlideItems.map((slide, index) => { + allSlidesList[slide.id] = `Slide ${index + 1}`; + }); + + if ($("#id-check-usenative").is(":checked")) { + context.presentation.load("tags"); + } + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); + await context.sync(); + finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; + finalTable += + "
    "; + slides.items.map((slide, index) => { + finalTable += ""; + }); + finalTable += "
    IndexId
    " + index + " - " + allSlidesList[slide.id] + "" + slide.id + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); + - >- + // 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. + + await PowerPoint.run(async (context) => { + let finalTable = ""; + context.presentation.load("slides"); + await context.sync(); + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + await context.sync(); + finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; + finalTable += + "
    "; + savedSlideSelection = []; + slides.load("items"); + await context.sync(); + slides.items.map((slide, index) => { + finalTable += ""; + savedSlideSelection.push(slide.id); + }); + finalTable += "
    IndexId
    " + index + "" + slide.id + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); +'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 + + // 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(); + try { + await context.sync(); + } catch (error) { + console.warn("You must select only one range of text for this action to work."); + return; + } + textRange.load("text"); + textRange.load("start"); + textRange.load("length"); + await context.sync(); + let txtHtml = textRange.text; + txtHtml = txtHtml.replace(/\n/g, "
    "); + txtHtml = txtHtml.replace(/\r/g, "
    "); + txtHtml = txtHtml.replace(/\v/g, "
    "); + let txtExplained = textRange.text; + txtExplained = txtExplained.replace(/\n/g, "NL"); + txtExplained = txtExplained.replace(/\r/g, "CR"); + txtExplained = txtExplained.replace(/\v/g, "VV"); + let finalTable = ""; + finalTable += + "
    "; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += ""; + finalTable += "
    IndexId
    Raw" + textRange.text + "
    Html" + txtHtml + "
    Exp" + txtExplained + "
    Start" + textRange.start + "
    Length" + textRange.length + "
    "; + $("#outputSpan").empty(); + $("#outputSpan").append(finalTable); + }); + - >- + // 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) => { + const slide1 = context.presentation.slides.getItem(savedTextSlideSelection[0]); + const shape1 = slide1.shapes.getItem(savedTextShapeSelection[0]); + const textRange = shape1.textFrame.textRange.getSubstring(savedTextTextRangeStart, savedTextTextRangeLength); + textRange.setSelected(); + await context.sync(); + }); 'PowerPoint.Presentation#insertSlidesFromBase64:member(1)': - >- // Link to full sample: @@ -12907,6 +13101,16 @@ // 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) => { + context.presentation.setSelectedSlides(savedSlideSelection); + await context.sync(); + }); + - >- + // 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) => { @@ -12928,16 +13132,6 @@ context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); }); - - >- - // 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) => { - context.presentation.setSelectedSlides(savedSlideSelection); - await context.sync(); - }); 'PowerPoint.Shape#fill:member': - >- // Link to full sample: @@ -12955,7 +13149,7 @@ }); await context.sync(); }); -'PowerPoint.Shape#left: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 @@ -12982,7 +13176,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#top: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 @@ -13009,7 +13203,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#width: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 @@ -13036,7 +13230,7 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Shape#height: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 @@ -13063,25 +13257,6 @@ currentLeft = 0; if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.ShapeCollection#getItemAt:member(1)': - - >- - // 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); - shape.tags.add("MOUNTAIN", "Denali"); - - await context.sync(); - - const myShapeTag = shape.tags.getItem("MOUNTAIN"); - myShapeTag.load("key, value"); - - await context.sync(); - - console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); - }); 'PowerPoint.ShapeCollection#addGeometricShape:member(1)': - >- // Link to full sample: @@ -13157,112 +13332,72 @@ return context.sync(); }); -'PowerPoint.ShapeFill#setSolidColor:member(1)': +'PowerPoint.ShapeCollection#getItemAt:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml - // Changes the selected shapes fill color to red. + await PowerPoint.run(async function(context) { + const slide = context.presentation.slides.getItemAt(0); + const shape = slide.shapes.getItemAt(0); + shape.tags.add("MOUNTAIN", "Denali"); - await PowerPoint.run(async (context) => { - const shapes = 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.ShapeFont#color: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. + const myShapeTag = shape.tags.getItem("MOUNTAIN"); + myShapeTag.load("key, value"); - await PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); - textRange.font.color = "green"; await context.sync(); + + console.log("Added key " + JSON.stringify(myShapeTag.key) + " with value " + JSON.stringify(myShapeTag.value)); }); -'PowerPoint.ShapeScopedCollection#getSelectedShapes: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 - // Saves which shapes are selected so that they can be reselected later. + // Changes the selected shapes fill color to red. await PowerPoint.run(async (context) => { - context.presentation.load("slides"); - await context.sync(); - const slides = context.presentation.getSelectedSlides(); - const slideCount = slides.getCount(); - slides.load("items"); - await context.sync(); - savedSlideSelection = []; - slides.items.map((slide) => { - savedSlideSelection.push(slide.id); - }); const shapes = context.presentation.getSelectedShapes(); const shapeCount = shapes.getCount(); shapes.load("items"); await context.sync(); shapes.items.map((shape) => { - savedShapeSelection.push(shape.id); + shape.fill.setSolidColor("red"); }); + await context.sync(); }); +'PowerPoint.ShapeFont#color:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml - // Gets the shapes you selected on the slide and displays their IDs on the - task pane. + // Sets the color of the selected text range to green. await PowerPoint.run(async (context) => { - let finalTable = ""; - const shapes = context.presentation.getSelectedShapes(); - const shapeCount = shapes.getCount(); - await context.sync(); - finalTable += "
    getSelectedShapes.getCount returned:" + shapeCount.value + "
    "; - finalTable += - "
    "; - shapes.load("items"); + const textRange = context.presentation.getSelectedTextRange(); + textRange.font.color = "green"; await context.sync(); - shapes.items.map((shape, index) => { - finalTable += ""; - }); - finalTable += "
    IndexId
    " + index + "" + shape.id + "
    "; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); }); +'PowerPoint.Slide#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml - // Arranges the selected shapes in a line from left to right. + // Deletes the selected slides. await PowerPoint.run(async (context) => { - const shapes = context.presentation.getSelectedShapes(); - const shapeCount = shapes.getCount(); - shapes.load("items"); + context.presentation.load("slides"); await context.sync(); - let maxHeight = 0; - shapes.items.map((shape) => { - shape.load("width,height"); - }); + const slides = context.presentation.getSelectedSlides(); + const slideCount = slides.getCount(); + slides.load("items"); await context.sync(); - shapes.items.map((shape) => { - shape.left = currentLeft; - shape.top = currentTop; - currentLeft += shape.width; - if (shape.height > maxHeight) maxHeight = shape.height; + slides.items.map((slide) => { + slide.delete(); }); - await context.sync(); - currentLeft = 0; - if (currentTop > slideHeight - 200) currentTop = 0; }); -'PowerPoint.Slide#delete:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml @@ -13285,50 +13420,19 @@ await context.sync(); }); +'PowerPoint.Slide#setSelectedShapes:member(1)': - >- // 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) => { - context.presentation.load("slides"); - await context.sync(); - const slides = context.presentation.getSelectedSlides(); - const slideCount = slides.getCount(); - slides.load("items"); - await context.sync(); - slides.items.map((slide) => { - slide.delete(); - }); - }); -'PowerPoint.Slide#getItemAt:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/shapes/get-set-shapes.yaml - // Selects slides 2, 4, and 5. + // Reselects shapes that were saved previously. 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); - slide2.load("id"); - slide4.load("id"); - slide5.load("id"); - try { - await context.sync(); - } catch (error) { - console.warn("This action requires at least 5 slides in the presentation."); - return; - } + const slide1 = context.presentation.slides.getItem(savedSlideSelection[0]); await context.sync(); - context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); + slide1.setSelectedShapes(savedShapeSelection); await context.sync(); }); -'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 @@ -13350,18 +13454,6 @@ slide1.setSelectedShapes([shape1.id, shape2.id]); await context.sync(); }); - - >- - // 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.SlideCollection#add:member(1)': - >- // Link to full sample: @@ -13402,70 +13494,30 @@ console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); -'PowerPoint.SlideScopedCollection#getSelectedSlides:member(1)': - >- // 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. + // Selects slides 2, 4, and 5. await PowerPoint.run(async (context) => { - let finalTable = ""; context.presentation.load("slides"); await context.sync(); - const allSlidesList = {}; - const allSlidesCount = context.presentation.slides.getCount(); - context.presentation.slides.load("items"); - await context.sync(); - let allSlideItems = context.presentation.slides.items; - allSlideItems.map((slide, index) => { - allSlidesList[slide.id] = `Slide ${index + 1}`; - }); - - if ($("#id-check-usenative").is(":checked")) { - context.presentation.load("tags"); + const slide2 = context.presentation.slides.getItemAt(1); + const slide4 = context.presentation.slides.getItemAt(3); + const slide5 = context.presentation.slides.getItemAt(4); + slide2.load("id"); + slide4.load("id"); + slide5.load("id"); + try { + await context.sync(); + } catch (error) { + console.warn("This action requires at least 5 slides in the presentation."); + return; } - const slides = context.presentation.getSelectedSlides(); - const slideCount = slides.getCount(); - slides.load("items"); await context.sync(); - finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; - finalTable += - "
    "; - slides.items.map((slide, index) => { - finalTable += ""; - }); - finalTable += "
    IndexId
    " + index + " - " + allSlidesList[slide.id] + "" + slide.id + "
    "; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); - }); - - >- - // 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. - - await PowerPoint.run(async (context) => { - let finalTable = ""; - context.presentation.load("slides"); - await context.sync(); - const slides = context.presentation.getSelectedSlides(); - const slideCount = slides.getCount(); - await context.sync(); - finalTable += "
    getSelectedSlides.getCount returned:" + slideCount.value + "
    "; - finalTable += - "
    "; - savedSlideSelection = []; - slides.load("items"); + context.presentation.setSelectedSlides([slide2.id, slide4.id, slide5.id]); await context.sync(); - slides.items.map((slide, index) => { - finalTable += ""; - savedSlideSelection.push(slide.id); - }); - finalTable += "
    IndexId
    " + index + "" + slide.id + "
    "; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); }); 'PowerPoint.TagCollection#add:member(1)': - >- @@ -13488,29 +13540,6 @@ console.log("Added key " + JSON.stringify(slide.tags.items[i].key) + " with value " + JSON.stringify(slide.tags.items[i].value)); } }); -'PowerPoint.TagCollection#getItem:member(1)': - - >- - // 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#delete:member(1)': - >- // Link to full sample: @@ -13525,58 +13554,28 @@ console.log(JSON.stringify(presentationTags)); }); -'PowerPoint.TextRange#getSelectedTextRange:member(1)': +'PowerPoint.TagCollection#getItem:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/text/get-set-textrange.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/tags/tags.yaml - // Gets the selected text range and prints data about the range on the task - pane. + 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 PowerPoint.run(async (context) => { - const textRange = context.presentation.getSelectedTextRange(); - try { - await context.sync(); - } catch (error) { - console.warn("You must select only one range of text for this action to work."); - return; - } - textRange.load("text"); - textRange.load("start"); - textRange.load("length"); await context.sync(); - let txtHtml = textRange.text; - txtHtml = txtHtml.replace(/\n/g, "
    "); - txtHtml = txtHtml.replace(/\r/g, "
    "); - txtHtml = txtHtml.replace(/\v/g, "
    "); - let txtExplained = textRange.text; - txtExplained = txtExplained.replace(/\n/g, "NL"); - txtExplained = txtExplained.replace(/\r/g, "CR"); - txtExplained = txtExplained.replace(/\v/g, "VV"); - let finalTable = ""; - finalTable += - "
    "; - finalTable += ""; - finalTable += ""; - finalTable += ""; - finalTable += ""; - finalTable += ""; - finalTable += "
    IndexId
    Raw" + textRange.text + "
    Html" + txtHtml + "
    Exp" + txtExplained + "
    Start" + textRange.start + "
    Length" + textRange.length + "
    "; - $("#outputSpan").empty(); - $("#outputSpan").append(finalTable); - }); - - >- - // 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. + const audienceTag = slide.tags.getItem("CUSTOMER_TYPE"); + audienceTag.load("key, value"); - 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); - textRange.setSelected(); await context.sync(); + + console.log("Added key " + JSON.stringify(audienceTag.key) + " with value " + JSON.stringify(audienceTag.value)); }); 'PowerPoint.TextRange#setSelected:member(1)': - >- From cdaf0f92dfcb4ccb4328da39bd0a78f9532917e6 Mon Sep 17 00:00:00 2001 From: ndeleuze <107273303+ndeleuze@users.noreply.github.com> Date: Tue, 10 Jan 2023 13:38:37 -0800 Subject: [PATCH 137/336] [Outlook] Prepend text on send (#738) * Create prepend-text-on-send.yaml * Update prepend-text-on-send.yaml * Adding references for PrependOnSend snippet * Moved to 99-preview-apis * Updated order * Change to beta * Set mailbox to preview * Remove conceptual article link Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/outlook.yaml | 11 +++ playlists/outlook.yaml | 11 +++ .../calendar-properties-apis.yaml | 1 + .../99-preview-apis/prepend-text-on-send.yaml | 79 +++++++++++++++++++ view-prod/outlook.json | 1 + view/outlook.json | 1 + 6 files changed, 104 insertions(+) create mode 100644 samples/outlook/99-preview-apis/prepend-text-on-send.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index af58f2a4a..3f62cbc52 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -701,6 +701,17 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-item-body-prepend-text-on-send + name: Prepend text to item body on send + fileName: prepend-text-on-send.yaml + description: >- + Prepends text to the beginning of the message or appointment's body once + it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml + group: Preview APIs + api_set: + Mailbox: '1.9' - 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 d2d34b61e..43dc7343e 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -701,6 +701,17 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-item-body-prepend-text-on-send + name: Prepend text to item body on send + fileName: prepend-text-on-send.yaml + description: >- + Prepends text to the beginning of the message or appointment's body once + it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml + group: Preview APIs + api_set: + Mailbox: '1.9' - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml diff --git a/samples/outlook/99-preview-apis/calendar-properties-apis.yaml b/samples/outlook/99-preview-apis/calendar-properties-apis.yaml index 22aff8892..7119c7dd8 100644 --- a/samples/outlook/99-preview-apis/calendar-properties-apis.yaml +++ b/samples/outlook/99-preview-apis/calendar-properties-apis.yaml @@ -1,3 +1,4 @@ +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. diff --git a/samples/outlook/99-preview-apis/prepend-text-on-send.yaml b/samples/outlook/99-preview-apis/prepend-text-on-send.yaml new file mode 100644 index 000000000..20bd4a34c --- /dev/null +++ b/samples/outlook/99-preview-apis/prepend-text-on-send.yaml @@ -0,0 +1,79 @@ +order: 2 +id: outlook-item-body-prepend-text-on-send +name: Prepend text to item body on send +description: Prepends text to the beginning of the message or appointment's body once it's sent. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#prepend-on-send").click(prependOnSend); + + 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(); + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.prependOnSendAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + console.log(`"${text}" will be prepended to the body once the message or appointment is sent. Send the mail item to test this feature.`); + }); + }); + } + language: typescript +template: + content: |- +
    +

    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. +

    + + +
    +
    + +
    + 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 + + 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/view-prod/outlook.json b/view-prod/outlook.json index 2b7b6b9c5..99bfb4581 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -74,5 +74,6 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index d5923077c..38c28a1c8 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -74,5 +74,6 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" } \ No newline at end of file From 1024bcf59ed239d7d9d1b50bdc019ffdda06c825 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 13 Jan 2023 14:18:10 -0800 Subject: [PATCH 138/336] [Outlook] (prepend-on-send) Add code snippet to reference docs (#744) --- playlists-prod/outlook.yaml | 22 ++++++------- playlists/outlook.yaml | 22 ++++++------- .../99-preview-apis/prepend-text-on-send.yaml | 2 +- snippet-extractor-metadata/outlook.xlsx | Bin 23284 -> 23307 bytes snippet-extractor-output/snippets.yaml | 30 ++++++++++++++++++ view-prod/outlook.json | 4 +-- view/outlook.json | 4 +-- 7 files changed, 57 insertions(+), 27 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 3f62cbc52..0079656a4 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -701,17 +701,6 @@ group: Other Item APIs api_set: Mailbox: '1.1' -- id: outlook-item-body-prepend-text-on-send - name: Prepend text to item body on send - fileName: prepend-text-on-send.yaml - description: >- - Prepends text to the beginning of the message or appointment's body once - it's sent. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml - group: Preview APIs - api_set: - Mailbox: '1.9' - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml @@ -721,5 +710,16 @@ 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-item-body-prepend-text-on-send + name: Prepend text to item body on send + fileName: prepend-text-on-send.yaml + description: >- + Prepends text to the beginning of the message or appointment's body once + it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.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 43dc7343e..1e4be2a52 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -701,17 +701,6 @@ group: Other Item APIs api_set: Mailbox: '1.1' -- id: outlook-item-body-prepend-text-on-send - name: Prepend text to item body on send - fileName: prepend-text-on-send.yaml - description: >- - Prepends text to the beginning of the message or appointment's body once - it's sent. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml - group: Preview APIs - api_set: - Mailbox: '1.9' - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml @@ -723,3 +712,14 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-item-body-prepend-text-on-send + name: Prepend text to item body on send + fileName: prepend-text-on-send.yaml + description: >- + Prepends text to the beginning of the message or appointment's body once + it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml + group: Preview APIs + api_set: + Mailbox: preview diff --git a/samples/outlook/99-preview-apis/prepend-text-on-send.yaml b/samples/outlook/99-preview-apis/prepend-text-on-send.yaml index 20bd4a34c..e689cfe58 100644 --- a/samples/outlook/99-preview-apis/prepend-text-on-send.yaml +++ b/samples/outlook/99-preview-apis/prepend-text-on-send.yaml @@ -67,7 +67,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/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 diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index c225608d68ad7987126dbd22c1e0225f6d698ce4..3ced1aee7a613b267bf6caacbf286526cee16cf9 100644 GIT binary patch delta 14379 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 delta 14350 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml + + // This snippet prepends text to the beginning of the message or + appointment's body once it's sent. + + const text = $("#text-field").val(); + + + // 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.prependOnSendAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + 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)': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 99bfb4581..a4d601e5a 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -74,6 +74,6 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 38c28a1c8..3f2a30fd3 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -74,6 +74,6 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml" + "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" } \ No newline at end of file From d1f46d1d8882445db69cc5bec68510bd33ca27ad Mon Sep 17 00:00:00 2001 From: Adrian-MSFT <107226862+Adrian-MSFT@users.noreply.github.com> Date: Fri, 20 Jan 2023 12:29:04 -0800 Subject: [PATCH 139/336] [Outlook] (sensitivity labels) Added sensitivity labels API samples (#740) * Added sensitivity labels API samples * Fix library paths * Fix library paths Co-authored-by: Sam Ramon <15154970+samantharamon@users.noreply.github.com> --- playlists-prod/outlook.yaml | 22 + playlists/outlook.yaml | 22 + .../sensitivity-labels-catalog.yaml | 84 + .../99-preview-apis/sensitivity-labels.yaml | 101 + view-prod/outlook.json | 2 + view/outlook.json | 2 + yarn.lock | 1849 ++++++++--------- 7 files changed, 1133 insertions(+), 949 deletions(-) create mode 100644 samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml create mode 100644 samples/outlook/99-preview-apis/sensitivity-labels.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 0079656a4..1da70280a 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -701,6 +701,28 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml + description: >- + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels + name: Work with sensitivity labels (Compose) + fileName: sensitivity-labels.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml + group: Preview APIs + api_set: + Mailbox: preview - 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 1e4be2a52..fe84cfda4 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -701,6 +701,28 @@ group: Other Item APIs api_set: Mailbox: '1.1' +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml + description: >- + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels + name: Work with sensitivity labels (Compose) + fileName: sensitivity-labels.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml + group: Preview APIs + api_set: + Mailbox: preview - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml diff --git a/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml b/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml new file mode 100644 index 000000000..ee54f1313 --- /dev/null +++ b/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml @@ -0,0 +1,84 @@ +order: 3 +id: outlook-sensitivity-labels-sensitivity-labels-catalog +name: Work with the sensitivity labels catalog +description: Determines if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#get-sensitivity-labels-enabled").click(getSensitivityLabelsCatalogIsEnabled); + $("#get-sensitivity-labels-catalog").click(getSensitivityLabelsCatalog); + + function getSensitivityLabelsCatalogIsEnabled() { + // This snippet determines if the sensitivity labels catalog is enabled on the current mailbox. + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.value); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + + function getSensitivityLabelsCatalog() { + // This snippet gets all available sensitivity labels from the catalog. + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + console.log("Sensitivity Labels Catalog:"); + console.log(JSON.stringify(catalog)); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to determine if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog.

    +

    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-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/99-preview-apis/sensitivity-labels.yaml b/samples/outlook/99-preview-apis/sensitivity-labels.yaml new file mode 100644 index 000000000..1615a3f9e --- /dev/null +++ b/samples/outlook/99-preview-apis/sensitivity-labels.yaml @@ -0,0 +1,101 @@ +order: 4 +id: outlook-sensitivity-labels-sensitivity-labels +name: Work with sensitivity labels (Compose) +description: Gets and sets the sensitivity label on a message or appointment in compose mode. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#get-sensitivity-label").click(getCurrentSensitivityLabel); + $("#set-sensitivity-label").click(setSensitivityLabel); + + function getCurrentSensitivityLabel() { + // 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); + } + }); + } + + function setSensitivityLabel() { + // This snippet sets the sensitivity label on the current mail item. + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + if (catalog.length > 0) { + var id = catalog[0].id; + Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.status); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + else { + console.log("Catalog list is empty"); + } + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + language: typescript +template: + content: |- +
    +

    This sample shows how to get and set the sensitivity label on a 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-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/view-prod/outlook.json b/view-prod/outlook.json index a4d601e5a..601c90df2 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -74,6 +74,8 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 3f2a30fd3..b4f2d8687 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -74,6 +74,8 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 28e6c5894..44cdeb503 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,1020 +3,971 @@ "@babel/code-frame@^7.0.0": - "integrity" "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz" - "version" "7.15.8" + 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": - "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" - "version" "7.15.7" + 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": - "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" - "version" "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" + chalk "^2.0.0" + js-tokens "^4.0.0" "@fast-csv/format@4.3.5": - "integrity" "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==" - "resolved" "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz" - "version" "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" + 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": - "integrity" "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==" - "resolved" "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz" - "version" "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" + 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": - "integrity" "sha1-ox10JBprHtu5c8822XooloNKUfk=" - "resolved" "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz" - "version" "0.4.31" + version "0.4.31" + resolved "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz" + integrity sha1-ox10JBprHtu5c8822XooloNKUfk= "@types/fs-extra@3.0.1": - "integrity" "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=" - "resolved" "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz" - "version" "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= dependencies: "@types/node" "*" "@types/glob@*": - "integrity" "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==" - "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz" - "version" "7.1.4" + 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": - "integrity" "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==" - "resolved" "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz" - "version" "3.12.7" + 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": - "integrity" "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==" - "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz" - "version" "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@*": - "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" - "version" "3.0.5" + version "3.0.5" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - "integrity" "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz" - "version" "16.10.3" + 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": - "integrity" "sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz" - "version" "11.15.54" + 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": - "integrity" "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz" - "version" "14.17.21" + 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": - "integrity" "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==" - "resolved" "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz" - "version" "0.8.9" + 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": - "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" - -"ansi-styles@^2.2.1": - "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - "version" "2.2.1" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"archiver-utils@^2.1.0": - "integrity" "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==" - "resolved" "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz" - "version" "2.1.0" - 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": - "integrity" "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==" - "resolved" "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz" - "version" "5.3.0" - 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": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"async@^3.2.0": - "version" "3.2.1" - -"balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" - -"base64-js@^1.3.1": - "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - "version" "1.5.1" - -"big-integer@^1.6.17": - "integrity" "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==" - "resolved" "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz" - "version" "1.6.49" - -"binary@~0.3.0": - "integrity" "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=" - "resolved" "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "buffers" "~0.1.1" - "chainsaw" "~0.1.0" - -"bl@^4.0.3": - "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "buffer" "^5.5.0" - "inherits" "^2.0.4" - "readable-stream" "^3.4.0" - -"bluebird@~3.4.1": - "integrity" "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" - "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz" - "version" "3.4.7" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"buffer-crc32@^0.2.1", "buffer-crc32@^0.2.13": - "integrity" "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - "resolved" "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - "version" "0.2.13" - -"buffer-indexof-polyfill@~1.0.0": - "integrity" "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" - "resolved" "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz" - "version" "1.0.2" - -"buffer@^5.5.0": - "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.1.13" - -"buffers@~0.1.1": - "integrity" "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" - "resolved" "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz" - "version" "0.1.1" - -"builtin-modules@^1.1.1": - "integrity" "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" - "version" "1.1.1" - -"chainsaw@~0.1.0": - "integrity" "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=" - "resolved" "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" - "version" "0.1.0" - dependencies: - "traverse" ">=0.3.0 <0.4" - -"chalk@^2.0.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.3.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@1.1.3": - "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - "version" "1.1.3" - 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": - "integrity" "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=" - "resolved" "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "inherits" "^2.0.1" - -"cli-cursor@^1.0.2": - "integrity" "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "restore-cursor" "^1.0.1" - -"cli-spinners@0.2.0": - "integrity" "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" - "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz" - "version" "0.2.0" - -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"colors@1.1.2": - "integrity" "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - "resolved" "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" - "version" "1.1.2" - -"commander@^2.12.1": - "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - "version" "2.20.3" - -"compress-commons@^4.1.0": - "integrity" "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==" - "resolved" "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz" - "version" "4.1.1" - 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": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"core-util-is@~1.0.0": - "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - "version" "1.0.3" - -"crc-32@^1.2.0": - "integrity" "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==" - "resolved" "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "exit-on-epipe" "~1.0.1" - "printj" "~1.1.0" - -"crc32-stream@^4.0.2": - "integrity" "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==" - "resolved" "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "crc-32" "^1.2.0" - "readable-stream" "^3.4.0" - -"dayjs@^1.8.34": - "integrity" "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" - "resolved" "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz" - "version" "1.10.7" - -"diff@^4.0.1": - "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - "version" "4.0.2" - -"duplexer2@~0.1.4": - "integrity" "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=" - "resolved" "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" - "version" "0.1.4" - dependencies: - "readable-stream" "^2.0.2" - -"end-of-stream@^1.4.1": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" - -"escape-string-regexp@^1.0.2": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^2.0.0": - "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - "version" "2.0.0" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"exceljs@^4.3.0": - "integrity" "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==" - "resolved" "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz" - "version" "4.3.0" - 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": - "integrity" "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - "resolved" "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz" - "version" "1.1.1" - -"exit-on-epipe@~1.0.1": - "integrity" "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - "resolved" "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" - "version" "1.0.1" - -"fast-csv@^4.3.1": - "integrity" "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==" - "resolved" "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz" - "version" "4.3.6" +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= + +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= + +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.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + 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= + 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= + +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= + +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= + +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= + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + 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= + 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" + +chalk@^2.0.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" + +charm@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz" + integrity sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0= + 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= + 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= + +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= + +colors@1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +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= + +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= + 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, 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= + +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= + +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": - "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - "version" "1.0.0" - -"fs-extra@3.0.1": - "integrity" "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "graceful-fs" "^4.1.2" - "jsonfile" "^3.0.0" - "universalify" "^0.1.0" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"fstream@^1.0.12": - "integrity" "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==" - "resolved" "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz" - "version" "1.0.12" - dependencies: - "graceful-fs" "^4.1.2" - "inherits" "~2.0.0" - "mkdirp" ">=0.5 0" - "rimraf" "2" - -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"glob@^7.0.0", "glob@^7.1.1", "glob@^7.1.3", "glob@^7.1.4": - "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - "version" "7.2.0" - 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": - "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" - "version" "4.2.8" - -"has-ansi@^2.0.0": - "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" - "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "ansi-regex" "^2.0.0" - -"has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "function-bind" "^1.1.1" - -"ieee754@^1.1.13": - "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - "version" "1.2.1" - -"immediate@~3.0.5": - "integrity" "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" - "version" "3.0.6" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - 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": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"interpret@^1.0.0": - "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - "version" "1.4.0" - -"is-core-module@^2.2.0": - "integrity" "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz" - "version" "2.7.0" - dependencies: - "has" "^1.0.3" - -"isarray@~1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - -"js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"jsonfile@^3.0.0": - "integrity" "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz" - "version" "3.0.1" +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= + 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= + +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= + 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= + +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= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + 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: + 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= + +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= optionalDependencies: - "graceful-fs" "^4.1.6" - -"jszip@^3.5.0": - "integrity" "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==" - "resolved" "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz" - "version" "3.7.1" - dependencies: - "lie" "~3.3.0" - "pako" "~1.0.2" - "readable-stream" "~2.3.6" - "set-immediate-shim" "~1.0.1" - -"lazystream@^1.0.0": - "integrity" "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=" - "resolved" "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "readable-stream" "^2.0.5" - -"lie@~3.3.0": - "integrity" "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==" - "resolved" "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "immediate" "~3.0.5" - -"listenercount@~1.0.1": - "integrity" "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" - "resolved" "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz" - "version" "1.0.1" - -"lodash.defaults@^4.2.0": - "integrity" "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - "resolved" "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz" - "version" "4.2.0" - -"lodash.difference@^4.5.0": - "integrity" "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - "resolved" "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" - "version" "4.5.0" - -"lodash.escaperegexp@^4.1.2": - "integrity" "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" - "resolved" "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" - "version" "4.1.2" - -"lodash.flatten@^4.4.0": - "integrity" "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - "resolved" "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz" - "version" "4.4.0" - -"lodash.groupby@^4.6.0": - "integrity" "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" - "resolved" "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz" - "version" "4.6.0" - -"lodash.isboolean@^3.0.3": - "integrity" "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - "resolved" "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - "version" "3.0.3" - -"lodash.isequal@^4.5.0": - "integrity" "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - "resolved" "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" - "version" "4.5.0" - -"lodash.isfunction@^3.0.9": - "integrity" "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" - "resolved" "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" - "version" "3.0.9" - -"lodash.isnil@^4.0.0": - "integrity" "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" - "resolved" "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz" - "version" "4.0.0" - -"lodash.isplainobject@^4.0.6": - "integrity" "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - "version" "4.0.6" - -"lodash.isundefined@^3.0.1": - "integrity" "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" - "resolved" "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz" - "version" "3.0.1" - -"lodash.union@^4.6.0": - "integrity" "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - "resolved" "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz" - "version" "4.6.0" - -"lodash.uniq@^4.5.0": - "integrity" "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - "version" "4.5.0" - -"lodash@^4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"minimatch@^3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"minimist@^1.2.5": - "version" "1.2.5" - -"mkdirp@^0.5.3", "mkdirp@>=0.5 0": - "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" - dependencies: - "minimist" "^1.2.5" - -"node-status@^1.0.0": - "integrity" "sha1-eQanxHplh9A0lr907GNKuqA/joA=" - "resolved" "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "charm" "1.0.1" - "cli-cursor" "^1.0.2" - "cli-spinners" "0.2.0" - "colors" "1.1.2" - -"normalize-path@^3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"once@^1.3.0", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^1.0.0": - "integrity" "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz" - "version" "1.1.0" - -"pako@~1.0.2": - "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - "version" "1.0.11" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-parse@^1.0.6": - "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - "version" "1.0.7" - -"printj@~1.1.0": - "integrity" "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" - "resolved" "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz" - "version" "1.1.2" - -"process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"readable-stream@^2.0.0": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - 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": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - 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": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - 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": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readable-stream@~2.3.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - 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": - "integrity" "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==" - "resolved" "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "minimatch" "^3.0.4" - -"rechoir@^0.6.2": - "integrity" "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=" - "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - "version" "0.6.2" - dependencies: - "resolve" "^1.1.6" - -"resolve@^1.1.6", "resolve@^1.3.2": - "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - "version" "1.20.0" - dependencies: - "is-core-module" "^2.2.0" - "path-parse" "^1.0.6" - -"restore-cursor@^1.0.1": - "integrity" "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "exit-hook" "^1.0.0" - "onetime" "^1.0.0" - -"rimraf@^3.0.0": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"rimraf@2": - "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - "version" "2.7.1" - dependencies: - "glob" "^7.1.3" - -"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safe-buffer@~5.2.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"saxes@^5.0.1": - "integrity" "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==" - "resolved" "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "xmlchars" "^2.2.0" - -"semver@^5.3.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"set-immediate-shim@~1.0.1": - "integrity" "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - "resolved" "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" - "version" "1.0.1" - -"setimmediate@~1.0.4": - "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" - -"shelljs@^0.8.5": - "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" - "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" - "version" "0.8.5" - dependencies: - "glob" "^7.0.0" - "interpret" "^1.0.0" - "rechoir" "^0.6.2" - -"sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" - -"string_decoder@^1.1.1": - "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - "version" "1.3.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== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + 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= + +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= + +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= + +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= + +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= + +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= + +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= + +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= + +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= + +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= + +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= + +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= + +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= + +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.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + 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" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +"mkdirp@>=0.5 0", mkdirp@^0.5.3: + 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= + 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= + 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= + +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= + +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, readable-stream@^2.0.2, readable-stream@^2.0.5, 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" + +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" + +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= + 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= + 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" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + 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.1" + 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: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +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= + +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" + safe-buffer "~5.2.0" -"string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" +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" + safe-buffer "~5.1.0" -"strip-ansi@^3.0.0": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.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= dependencies: - "ansi-regex" "^2.0.0" + ansi-regex "^2.0.0" -"supports-color@^2.0.0": - "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - "version" "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= -"supports-color@^5.3.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" +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" + has-flag "^3.0.0" -"tar-stream@^2.2.0": - "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" - "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - "version" "2.2.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" + 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": - "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - "version" "0.2.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" + rimraf "^3.0.0" "traverse@>=0.3.0 <0.4": - "integrity" "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" - "resolved" "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" - "version" "0.3.9" + version "0.3.9" + resolved "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= -"tslib@^1.13.0", "tslib@^1.8.1": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" +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": - "integrity" "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==" - "resolved" "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" - "version" "6.1.3" +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": - "integrity" "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" - "version" "2.29.0" - 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": - "integrity" "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz" - "version" "3.9.10" - -"universalify@^0.1.0": - "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - "version" "0.1.2" - -"unzipper@^0.10.11": - "integrity" "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==" - "resolved" "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz" - "version" "0.10.11" - 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": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"uuid@^8.3.0": - "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - "version" "8.3.2" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"xmlchars@^2.2.0": - "integrity" "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - "resolved" "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - "version" "2.2.0" - -"yarn@^1.22.19": - "integrity" "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==" - "resolved" "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" - "version" "1.22.19" - -"zip-stream@^4.1.0": - "integrity" "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==" - "resolved" "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "archiver-utils" "^2.1.0" - "compress-commons" "^4.1.0" - "readable-stream" "^3.6.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: + 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= + +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= + +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 f747b50807e9c78279a4dd542ea739f128d8657a Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 23 Jan 2023 11:11:24 -0800 Subject: [PATCH 140/336] [Outlook] (sensitivity label) Add code snippets to sensitivity label API (#746) --- playlists-prod/outlook.yaml | 44 +- playlists/outlook.yaml | 44 +- snippet-extractor-metadata/outlook.xlsx | Bin 23307 -> 23716 bytes snippet-extractor-output/snippets.yaml | 4108 ++++++++++++----------- view-prod/outlook.json | 6 +- view/outlook.json | 6 +- 6 files changed, 2201 insertions(+), 2007 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 1da70280a..1052d47fe 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -701,28 +701,6 @@ group: Other Item APIs api_set: Mailbox: '1.1' -- id: outlook-sensitivity-labels-sensitivity-labels-catalog - name: Work with the sensitivity labels catalog - fileName: sensitivity-labels-catalog.yaml - description: >- - Determines if sensitivity labels are enabled on the mailbox and retrieves - all available labels from the catalog. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels - name: Work with sensitivity labels (Compose) - fileName: sensitivity-labels.yaml - description: >- - Gets and sets the sensitivity label on a message or appointment in compose - mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - group: Preview APIs - api_set: - Mailbox: preview - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml @@ -743,5 +721,27 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml + description: >- + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels + name: Work with sensitivity labels (Compose) + fileName: sensitivity-labels.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.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 fe84cfda4..2f775039a 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -701,28 +701,6 @@ group: Other Item APIs api_set: Mailbox: '1.1' -- id: outlook-sensitivity-labels-sensitivity-labels-catalog - name: Work with the sensitivity labels catalog - fileName: sensitivity-labels-catalog.yaml - description: >- - Determines if sensitivity labels are enabled on the mailbox and retrieves - all available labels from the catalog. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels - name: Work with sensitivity labels (Compose) - fileName: sensitivity-labels.yaml - description: >- - Gets and sets the sensitivity label on a message or appointment in compose - mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml - group: Preview APIs - api_set: - Mailbox: preview - id: outlook-calendar-properties-apis name: Work with calendar properties APIs (Compose) fileName: calendar-properties-apis.yaml @@ -745,3 +723,25 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml + description: >- + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels + name: Work with sensitivity labels (Compose) + fileName: sensitivity-labels.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml + group: Preview APIs + api_set: + Mailbox: preview diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 3ced1aee7a613b267bf6caacbf286526cee16cf9..86ae2ead6e06979e7d4c1acedf0494ef3926e679 100644 GIT binary patch delta 14688 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 delta 14328 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 QMmf<_ml6g;{hvDj4|QS3+5i9m diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 924194c20..913c0ad06 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -7803,92 +7803,85 @@ await context.sync(); }); -'Office.AppointmentCompose#loadCustomPropertiesAsync:member(1)': +'Office.AppointmentCompose#addFileAttachmentAsync: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.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 { - console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); - } - }); -'Office.AppointmentCompose#getSelectedDataAsync:member(2)': + const attachmentUrl = $("#attachmentUrl").val(); + + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { "asyncContext" : { var1: 1, var2: true } }, + function(result) { console.log(result); }); +'Office.AppointmentCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const text = asyncResult.value.data; - const prop = asyncResult.value.sourceProperty; - console.log("Selected text in " + prop + ": " + text); - } else { - console.error(asyncResult.error); - } - }); -'Office.AppointmentCompose#setSelectedDataAsync:member(1)': + 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); }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - Office.context.mailbox.item.setSelectedDataAsync("Replaced", - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Selected text has been updated successfully."); - } else { - console.error(asyncResult.error); + // Set the signature for the current item with inline image. + + const modIcon1Base64 = + "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; + + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + modIcon1Base64, + "myImage.png", + { isInline: true }, + function(result) { + if (result.status == Office.AsyncResultStatus.Succeeded) { + const signature = $("#signature").val() + ""; + console.log(`Setting signature to "${signature}".`); + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); + } + ); + } else { + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + } } - }); -'Office.AppointmentCompose#close:member(1)': + ); +'Office.AppointmentCompose#addItemAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.close(); -'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 + const attachmentItemId = $("#attachmentItemId").val(); - Office.context.mailbox.item.saveAsync(function (result) { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`saveAsync succeeded, itemId is ${result.value}`); - } - else { - console.error(`saveAsync failed with message ${result.error.message}`); - } - }); -'Office.AppointmentCompose#optionalAttendees:member': + 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: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-optional-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) - { + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const apptOptionalAttendees = asyncResult.value; - for (let i = 0; i < apptOptionalAttendees.length; i++) { - console.log( - "Optional attendees: " + - apptOptionalAttendees[i].displayName + - " (" + - apptOptionalAttendees[i].emailAddress + - ") - response: " + - apptOptionalAttendees[i].appointmentResponse - ); + const categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Categories assigned to this item:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories assigned to this item."); } } else { console.error(asyncResult.error); @@ -7896,263 +7889,178 @@ }); - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - const email = $("#emailOptional") - .val() - .toString(); - const emailArray = [email]; + // Note: In order for you to successfully add a category, - Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, - function(asyncResult) { + // it must be in the mailbox categories master list. + + + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting optional attendees field."); + const masterCategories = asyncResult.value; + if (masterCategories && masterCategories.length > 0) { + // Grab the first category from the master list. + const categoryToAdd = [masterCategories[0].displayName]; + Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully assigned category '${categoryToAdd}' to item.`); + } else { + console.log("categories.addAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); + } } else { console.error(asyncResult.error); } }); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const apptOrganizer = asyncResult.value; - console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); + const categories = asyncResult.value; + if (categories && categories.length > 0) { + // Grab the first category assigned to this item. + const categoryToRemove = [categories[0].displayName]; + Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); + } else { + console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories assigned to this item."); + } } else { console.error(asyncResult.error); } }); -'Office.AppointmentCompose#requiredAttendees:member': +'Office.AppointmentCompose#close:member(1)': - >- // 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml - Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const apptRequiredAttendees = asyncResult.value; - for (let i = 0; i < apptRequiredAttendees.length; i++) { - console.log( - "Required attendees: " + - apptRequiredAttendees[i].displayName + - " (" + - apptRequiredAttendees[i].emailAddress + - ") - response: " + - apptRequiredAttendees[i].appointmentResponse - ); - } - } else { - console.error(asyncResult.error); - } - }); + 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/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - const email = $("#emailRequired") - .val() - .toString(); - const emailArray = [email]; + // Disable the client signature. - Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, - function(asyncResult) { + Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) + { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting required attendees field."); + console.log("disableClientSignatureAsync succeeded"); } else { console.error(asyncResult.error); } }); -'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 - - const id = $("#notificationId").val(); - - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); +'Office.AppointmentCompose#end:member': - >- // 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.end.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Appointment ends: ${result.value}`); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-end-appointment-organizer.yaml - const id = $("#notificationId").val(); + Office.context.mailbox.item.start.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Get start date failed with message ${result.error.message}`); + return; + } - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Persistent informational notification message with id = " + id, - icon: "icon1", - persistent: true - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + const end = result.value; // Set end to current start date and time. + end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. + Office.context.mailbox.item.end.setAsync(end, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Set end date failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set end date and time to ${end}`); + }); + }); +'Office.AppointmentCompose#enhancedLocation:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + 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.notificationMessages.getAllAsync(handleResult); + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to get locations. Error message: ${result.error.message}`); + return; + } + const places = result.value; + if (places && places.length > 0) { + result.value.forEach(function(place) { + console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); + if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { + console.log("Email address: " + place.emailAddress); + } + }); + } else { + console.log("There are no locations."); + } + }); - >- // 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(); + 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.notificationMessages.replaceAsync( - id, + const locations = [ { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Notification message with id = " + id + " has been replaced with an informational message.", - icon: "icon2", - persistent: false + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom }, - handleResult); - - >- - // 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(); - - Office.context.mailbox.item.notificationMessages.removeAsync(id, - handleResult); -'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 - - const attachmentUrl = $("#attachmentUrl").val(); - - Office.context.mailbox.item.addFileAttachmentAsync( - attachmentUrl, - getFileName(attachmentUrl), - { "asyncContext" : { var1: 1, var2: true } }, - function(result) { console.log(result); }); -'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#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="; - - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - - // Set the signature for the current item with inline image. - - const modIcon1Base64 = - "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; - - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - modIcon1Base64, - "myImage.png", - { isInline: true }, - function(result) { - if (result.status == Office.AsyncResultStatus.Succeeded) { - const signature = $("#signature").val() + ""; - console.log(`Setting signature to "${signature}".`); - Office.context.mailbox.item.body.setSignatureAsync( - signature, - { coercionType: "html" }, - function(asyncResult) { - console.log(`setSignatureAsync: ${asyncResult.status}`); - } - ); - } else { - console.error(`addFileAttachmentFromBase64Async: ${result.error}`); - } + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room } - ); -'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 + ]; - 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.enhancedLocation.addAsync(locations, (result) => + { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully added locations ${JSON.stringify(locations)}`); + } else { + console.error(`Failed to add locations. Error message: ${result.error.message}`); + } }); -'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 + 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.removeAttachmentAsync( - $("#attachmentId").val(), - { asyncContext : null }, - function(result) - { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`${result.error.message}`); - } else { - console.log(`Attachment removed successfully.`); - } - } - ); + const locations = [ + { + id: "Contoso", + type: Office.MailboxEnums.LocationType.Custom + }, + { + id: "room500@test.com", + type: Office.MailboxEnums.LocationType.Room + } + ]; + + Office.context.mailbox.item.enhancedLocation.removeAsync(locations, (result) + => { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully removed locations ${JSON.stringify(locations)}`); + } else { + console.error(`Failed to remove locations. Error message: ${result.error.message}`); + } + }); 'Office.AppointmentCompose#getAttachmentContentAsync:member(1)': - >- // Link to full sample: @@ -8184,159 +8092,67 @@ result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } } -'Office.AppointmentCompose#categories:member': +'Office.AppointmentCompose#getAttachmentsAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Categories assigned to this item:"); - console.log(JSON.stringify(categories)); + Office.context.mailbox.item.getAttachmentsAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(result.error.message); } else { - console.log("There are no categories assigned to this item."); - } - } else { - console.error(asyncResult.error); - } - }); - - >- - // 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. - - - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const masterCategories = asyncResult.value; - if (masterCategories && masterCategories.length > 0) { - // Grab the first category from the master list. - const categoryToAdd = [masterCategories[0].displayName]; - Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully assigned category '${categoryToAdd}' to item.`); - } else { - console.log("categories.addAsync call failed with error: " + asyncResult.error.message); + 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."); } - }); - } else { - console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); } - } else { - console.error(asyncResult.error); - } }); +'Office.AppointmentCompose#getItemIdAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const categories = asyncResult.value; - if (categories && categories.length > 0) { - // Grab the first category assigned to this item. - const categoryToRemove = [categories[0].displayName]; - Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); - } else { - console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); - } - }); + Office.context.mailbox.item.getItemIdAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`getItemIdAsync failed with message: ${result.error.message}`); } else { - console.log("There are no categories assigned to this item."); + console.log(result.value); } - } else { - console.error(asyncResult.error); - } }); -'Office.AppointmentCompose#recurrence:member': +'Office.AppointmentCompose#getSelectedDataAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-set-recurrence-appointment-organizer.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml - Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, + function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const recurrence = asyncResult.value; - if (recurrence === null) { - console.log("This is a single appointment."); - } else { - console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); - } + const text = asyncResult.value.data; + const prop = asyncResult.value.sourceProperty; + console.log("Selected text in " + prop + ": " + text); } else { console.error(asyncResult.error); } }); - - >- - // 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. - - - const currentDate = new Date(); - - let seriesTimeObject: Office.SeriesTime; - - // Set series start date to tomorrow. - - seriesTimeObject.setStartDate(currentDate.getFullYear(), - currentDate.getMonth(), currentDate.getDay() + 1); - - // Set series end date to one year from now. - - seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, - currentDate.getMonth() + 1, currentDate.getDay()); - - // Set start time to 1:30 PM. - - seriesTimeObject.setStartTime(13, 30); - - // Set duration to 30 minutes. - - seriesTimeObject.setDuration(30); - - - const pattern: Office.Recurrence = { - seriesTime: seriesTimeObject, - recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, - recurrenceProperties: { - interval: 1, - dayOfWeek: Office.MailboxEnums.Days.Tue, - weekNumber: Office.MailboxEnums.WeekNumber.Second, - month: Office.MailboxEnums.Month.Sep - }, - recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } - }; - - - Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { - if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); - return; - } - console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); - }); -'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 - - const seriesId = Office.context.mailbox.item.seriesId; - - - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); - } 'Office.AppointmentCompose#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: @@ -8397,72 +8213,44 @@ ); } }); -'Office.AppointmentCompose#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 - - Office.context.mailbox.item.getItemIdAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`getItemIdAsync failed with message: ${result.error.message}`); - } else { - console.log(result.value); - } - }); -'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': +'Office.AppointmentCompose#isAllDayEvent:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - - // Disable the client signature. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) - { + Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("disableClientSignatureAsync succeeded"); + console.log("Is this an all-day event? " + asyncResult.value); } else { - console.error(asyncResult.error); + console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); } }); -'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - - // Check if the client signature is currently enabled. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml - Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("isClientSignatureEnabledAsync succeeded with result: " + asyncResult.value); + Office.context.mailbox.item.isAllDayEvent.setAsync(true, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Failed to set all-day event: " + JSON.stringify(asyncResult.error)); } else { - console.error(asyncResult.error); - } - }); -'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 - - Office.context.mailbox.item.subject.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + console.log("Appointment set to all-day event."); } - console.log(`Subject: ${result.value}`); }); +'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - let subject = "Hello World!"; + // Check if the client signature is currently enabled. - Office.context.mailbox.item.subject.setAsync(subject, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + Office.context.mailbox.item.isClientSignatureEnabledAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("isClientSignatureEnabledAsync succeeded with result: " + asyncResult.value); + } else { + console.error(asyncResult.error); } - console.log(`Successfully set subject to ${subject}`); }); 'Office.AppointmentCompose#itemType:member': - >- @@ -8479,180 +8267,312 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'Office.AppointmentCompose#start:member': +'Office.AppointmentCompose#loadCustomPropertiesAsync: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/15-item-custom-properties/load-set-get-save.yaml - Office.context.mailbox.item.start.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + 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 { + console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); } - console.log(`Appointment starts: ${result.value}`); }); +'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-start-appointment-organizer.yaml - - const start = new Date(); // Represents current date and time. - - start.setDate(start.getDate() + 2); // Add 2 days to current date. + 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.start.setAsync(start, (result) => { + Office.context.mailbox.item.location.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Successfully set start date and time to ${start}`); + console.log(`Appointment location: ${result.value}`); }); -'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 + 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.end.getAsync((result) => { + const location = "my office"; + + Office.context.mailbox.item.location.setAsync(location, (result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Appointment ends: ${result.value}`); + console.log(`Successfully set location to ${location}`); }); +'Office.AppointmentCompose#notificationMessages: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.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}`); - return; - } + const id = $("#notificationId").val(); - const end = result.value; // Set end to current start date and time. - end.setDate(end.getDate() + 1); // Set end as 1 day later than start date. - Office.context.mailbox.item.end.setAsync(end, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Set end date failed with message ${result.error.message}`); - return; + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // 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(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Non-persistent informational notification message with id = " + id, + icon: "icon1", + persistent: false + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // 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(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // 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); + - >- + // 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(); + + Office.context.mailbox.item.notificationMessages.replaceAsync( + id, + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Notification message with id = " + id + " has been replaced with an informational message.", + icon: "icon2", + persistent: false + }, + handleResult); + - >- + // 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(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'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 + + Office.context.mailbox.item.optionalAttendees.getAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const apptOptionalAttendees = asyncResult.value; + for (let i = 0; i < apptOptionalAttendees.length; i++) { + console.log( + "Optional attendees: " + + apptOptionalAttendees[i].displayName + + " (" + + apptOptionalAttendees[i].emailAddress + + ") - response: " + + apptOptionalAttendees[i].appointmentResponse + ); } - console.log(`Successfully set end date and time to ${end}`); - }); + } else { + console.error(asyncResult.error); + } }); -'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 + 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.location.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + const email = $("#emailOptional") + .val() + .toString(); + const emailArray = [email]; + + Office.context.mailbox.item.optionalAttendees.setAsync(emailArray, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting optional attendees field."); + } else { + console.error(asyncResult.error); } - console.log(`Appointment location: ${result.value}`); }); +'Office.AppointmentCompose#organizer: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-organizer-appointment-organizer.yaml - const location = "my office"; + Office.context.mailbox.item.organizer.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const apptOrganizer = asyncResult.value; + console.log("Organizer: " + apptOrganizer.displayName + " (" + apptOrganizer.emailAddress + ")"); + } else { + console.error(asyncResult.error); + } + }); +'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 - Office.context.mailbox.item.location.setAsync(location, (result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; + Office.context.mailbox.item.recurrence.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const recurrence = asyncResult.value; + if (recurrence === null) { + console.log("This is a single appointment."); + } else { + console.log(`Recurrence pattern: ${JSON.stringify(recurrence)}`); + } + } else { + console.error(asyncResult.error); } - console.log(`Successfully set location to ${location}`); }); -'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 + 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. + + + const currentDate = new Date(); + + let seriesTimeObject: Office.SeriesTime; + + // Set series start date to tomorrow. + + seriesTimeObject.setStartDate(currentDate.getFullYear(), + currentDate.getMonth(), currentDate.getDay() + 1); + + // Set series end date to one year from now. + + seriesTimeObject.setEndDate(currentDate.getFullYear() + 1, + currentDate.getMonth() + 1, currentDate.getDay()); + + // Set start time to 1:30 PM. + + seriesTimeObject.setStartTime(13, 30); + + // Set duration to 30 minutes. + + seriesTimeObject.setDuration(30); + + + const pattern: Office.Recurrence = { + seriesTime: seriesTimeObject, + recurrenceType: Office.MailboxEnums.RecurrenceType.Yearly, + recurrenceProperties: { + interval: 1, + dayOfWeek: Office.MailboxEnums.Days.Tue, + weekNumber: Office.MailboxEnums.WeekNumber.Second, + month: Office.MailboxEnums.Month.Sep + }, + recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } + }; + - Office.context.mailbox.item.enhancedLocation.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to get locations. Error message: ${result.error.message}`); + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); return; } - const places = result.value; - if (places && places.length > 0) { - result.value.forEach(function(place) { - console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); - if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { - console.log("Email address: " + place.emailAddress); - } - }); - } else { - console.log("There are no locations."); - } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); +'Office.AppointmentCompose#removeAttachmentAsync: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 - - const locations = [ - { - id: "Contoso", - type: Office.MailboxEnums.LocationType.Custom - }, - { - id: "room500@test.com", - type: Office.MailboxEnums.LocationType.Room - } - ]; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.enhancedLocation.addAsync(locations, (result) => - { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully added locations ${JSON.stringify(locations)}`); - } else { - console.error(`Failed to add locations. Error message: ${result.error.message}`); - } - }); + 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.AppointmentCompose#requiredAttendees: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 - - const locations = [ - { - id: "Contoso", - type: Office.MailboxEnums.LocationType.Custom - }, - { - id: "room500@test.com", - type: Office.MailboxEnums.LocationType.Room - } - ]; + 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.enhancedLocation.removeAsync(locations, (result) - => { - if (result.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully removed locations ${JSON.stringify(locations)}`); + Office.context.mailbox.item.requiredAttendees.getAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const apptRequiredAttendees = asyncResult.value; + for (let i = 0; i < apptRequiredAttendees.length; i++) { + console.log( + "Required attendees: " + + apptRequiredAttendees[i].displayName + + " (" + + apptRequiredAttendees[i].emailAddress + + ") - response: " + + apptRequiredAttendees[i].appointmentResponse + ); + } } else { - console.error(`Failed to remove locations. Error message: ${result.error.message}`); + console.error(asyncResult.error); } }); -'Office.AppointmentCompose#isAllDayEvent: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/30-recipients-and-attendees/get-set-required-attendees-appointment-organizer.yaml - Office.context.mailbox.item.isAllDayEvent.getAsync(function(asyncResult) { + const email = $("#emailRequired") + .val() + .toString(); + const emailArray = [email]; + + Office.context.mailbox.item.requiredAttendees.setAsync(emailArray, + function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Is this an all-day event? " + asyncResult.value); + console.log("Succeeded in setting required attendees field."); } else { - console.log("Failed to get if this is an all-day event. Error: " + JSON.stringify(asyncResult.error)); + console.error(asyncResult.error); } }); +'Office.AppointmentCompose#saveAsync: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/25-item-save-and-close/save.yaml - Office.context.mailbox.item.isAllDayEvent.setAsync(true, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Failed) { - console.log("Failed to set all-day event: " + JSON.stringify(asyncResult.error)); - } else { - console.log("Appointment set to all-day event."); + Office.context.mailbox.item.saveAsync(function (result) { + if (result.status === Office.AsyncResultStatus.Succeeded) { + console.log(`saveAsync succeeded, itemId is ${result.value}`); + } + else { + console.error(`saveAsync failed with message ${result.error.message}`); } }); 'Office.AppointmentCompose#sensitivity:member': @@ -8681,177 +8601,150 @@ } } ); -'Office.AppointmentCompose#sessionData:member': +'Office.AppointmentCompose#sensitivityLabel:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("The sessionData is " + JSON.stringify(asyncResult.value)); + // 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("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); + console.log("Action failed with error: " + asyncResult.error.message); } }); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.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 { - console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + // This snippet sets the sensitivity label on the current mail item. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + if (catalog.length > 0) { + var id = catalog[0].id; + Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.status); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + else { + console.log("Catalog list is empty"); + } + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); } }); -'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 - - const apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; - - console.log("Optional attendees:"); - - for (let i = 0; i < apptOptionalAttendees.length; i++) { - console.log( - apptOptionalAttendees[i].displayName + - " (" + - apptOptionalAttendees[i].emailAddress + - ") - response: " + - apptOptionalAttendees[i].appointmentResponse - ); - } -'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 - - const apptOrganizer = Office.context.mailbox.item.organizer; - - console.log("Organizer: " + apptOrganizer.displayName + " (" + - apptOrganizer.emailAddress + ")"); -'Office.AppointmentRead#requiredAttendees:member': +'Office.AppointmentCompose#seriesId: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - const apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; + const seriesId = Office.context.mailbox.item.seriesId; - console.log("Required attendees:"); - for (let i = 0; i < apptRequiredAttendees.length; i++) { - console.log( - apptRequiredAttendees[i].displayName + - " (" + - apptRequiredAttendees[i].emailAddress + - ") - response: " + - apptRequiredAttendees[i].appointmentResponse - ); + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); } -'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 - - const id = $("#notificationId").val(); - - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); +'Office.AppointmentCompose#sessionData:member': - >- // 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.sessionData.getAllAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("The sessionData is " + JSON.stringify(asyncResult.value)); + } else { + console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); +'Office.AppointmentCompose#setSelectedDataAsync: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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Persistent informational notification message with id = " + id, - icon: "icon1", - persistent: true - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); + Office.context.mailbox.item.setSelectedDataAsync("Replaced", + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Selected text has been updated successfully."); + } else { + console.error(asyncResult.error); + } + }); +'Office.AppointmentCompose#start:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + 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.notificationMessages.getAllAsync(handleResult); + Office.context.mailbox.item.start.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Appointment starts: ${result.value}`); + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-start-appointment-organizer.yaml - const id = $("#notificationId").val(); + const start = new Date(); // Represents current date and time. - Office.context.mailbox.item.notificationMessages.replaceAsync( - id, - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Notification message with id = " + id + " has been replaced with an informational message.", - icon: "icon2", - persistent: false - }, - handleResult); + start.setDate(start.getDate() + 2); // Add 2 days to current date. + + Office.context.mailbox.item.start.setAsync(start, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set start date and time to ${start}`); + }); +'Office.AppointmentCompose#subject:member': - >- // 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml - Office.context.mailbox.item.notificationMessages.removeAsync(id, - handleResult); -'Office.AppointmentRead#getAttachmentContentAsync:member(1)': + Office.context.mailbox.item.subject.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Subject: ${result.value}`); + }); - >- // 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. - - const attachments = item.attachments; - - if (attachments.length <= 0) { - console.log("Mail item has no attachments."); - return; - } + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-set-subject-compose.yaml + let subject = "Hello World!"; - for (let i = 0; i < attachments.length; i++) { - // Log the attachment type and its contents to the console. - item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); - } + Office.context.mailbox.item.subject.setAsync(subject, (result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set subject to ${subject}`); + }); 'Office.AppointmentRead#attachments:member': - >- // Link to full sample: @@ -8931,109 +8824,299 @@ console.error(asyncResult.error); } }); -'Office.AppointmentRead#recurrence:member': +'Office.AppointmentRead#dateTimeCreated:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml - const recurrence = Office.context.mailbox.item.recurrence; + console.log(`Creation date and time: + ${Office.context.mailbox.item.dateTimeCreated}`); +'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 + console.log(`Date and time item last modified: + ${Office.context.mailbox.item.dateTimeModified}`); +'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 - if (recurrence === undefined) { - console.log("This item is a message but not a meeting request."); - } else if (recurrence === null) { - console.log("This is a single appointment."); - } else { - console.log(JSON.stringify(recurrence)); + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with + some bold text."); +'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 + + Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL + with some bold text.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); + }); +'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 + + 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: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: 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) { + console.error(`Action failed with message ${result.error.message}`); + } + } + }); +'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 + + Office.context.mailbox.item.displayReplyFormAsync("This is a reply with + some text in italics.", function( + asyncResult + ) { + 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 + + // The async version is only available starting with requirement set 1.9, + + // and 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
    ", + attachments: [ + { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, + { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } + ] + }, + function(asyncResult) { + console.log(JSON.stringify(asyncResult)); + } + ); +'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': + - >- + // 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}`); + return; + } + const places = result.value; + if (places && places.length > 0) { + result.value.forEach(function(place) { + console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); + if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { + console.log("Email address: " + place.emailAddress); + } + }); + } else { + console.log("There are no locations."); + } + }); +'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 + + // Gets the attachments of the current message or appointment in read mode. + + // The item.attachments call can only be used in read mode. + + const attachments = item.attachments; + + if (attachments.length <= 0) { + console.log("Mail item has no attachments."); + return; } -'Office.AppointmentRead#seriesId:member': + + + for (let i = 0; i < attachments.length; i++) { + // Log the attachment type and its contents to the console. + item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); + } +'Office.AppointmentRead#getEntities:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + 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++; + } - const seriesId = Office.context.mailbox.item.seriesId; + if (entities.urls.length > 0) { + console.warn("URLs: "); + console.log(entities.urls); + entityTypesFound++; + } + if (entityTypesFound == 0) - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); + { + console.log("No entities found on this item."); } -'Office.AppointmentRead#displayReplyForm:member(1)': +'Office.AppointmentRead#getEntitiesByType:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml - Office.context.mailbox.item.displayReplyForm("This is a reply with some - text in italics."); + 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/55-display-items/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - Office.context.mailbox.item.displayReplyForm({ - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
    ", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: 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) { - console.error(`Action failed with message ${result.error.message}`); - } - } - }); -'Office.AppointmentRead#displayReplyAllForm:member(1)': + // 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/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with - some bold text."); -'Office.AppointmentRead#displayReplyFormAsync:member(1)': + // This API would only work when you click on 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/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/contextual.yaml - Office.context.mailbox.item.displayReplyFormAsync("This is a reply with - some text in italics.", function( - asyncResult - ) { - console.log(JSON.stringify(asyncResult)); - }); + // This API would only work when you click on 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/55-display-items/display-reply-with-attachments.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - // The async version is only available starting with requirement set 1.9, + const entities = Office.context.mailbox.item.getSelectedEntities(); - // and provides a callback when the new appointment form has been created. + let entityTypesFound = 0; - Office.context.mailbox.item.displayReplyFormAsync( - { - htmlBody: "This is a reply with a couple of attachments - an inline image and an item
    ", - attachments: [ - { type: "file", url: "http://i.imgur.com/9S36xvA.jpg", name: "dog.jpg", isInline: true }, - { type: "item", itemId: Office.context.mailbox.item.itemId, name: "test_email.msg" } - ] - }, - function(asyncResult) { - console.log(JSON.stringify(asyncResult)); - } - ); -'Office.AppointmentRead#displayReplyAllFormAsync:member(1)': + 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/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/selected.yaml - Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL - with some bold text.", function( - asyncResult - ) { - console.log(JSON.stringify(asyncResult)); - }); + 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."); + } 'Office.AppointmentRead#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: @@ -9094,189 +9177,208 @@ ); } }); -'Office.AppointmentRead#getEntities:member(1)': +'Office.AppointmentRead#itemClass:member': - >- // 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++; - } + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-class-read.yaml - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } + 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 - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } + const itemType = Office.context.mailbox.item.itemType; - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; + 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.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 - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } + 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 { + console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + } + }); +'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 - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } + console.log(`Appointment location: + ${Office.context.mailbox.item.location}`); +'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 - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } + console.log(`Normalized subject: + ${Office.context.mailbox.item.normalizedSubject}`); +'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 - if (entityTypesFound == 0) + const id = $("#notificationId").val(); - { - console.log("No entities found on this item."); - } -'Office.AppointmentRead#getEntitiesByType:member(1)': + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/75-entities-and-regex-matches/basic-entities.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - console.log(Office.context.mailbox.item.getEntitiesByType(Office.MailboxEnums.EntityType.Address)); -'Office.AppointmentRead#getFilteredEntitiesByName:member(1)': + const id = $("#notificationId").val(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Non-persistent informational notification message with id = " + id, + icon: "icon1", + persistent: false + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // 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/35-notifications/add-getall-remove.yaml - // This API would only work when you click on highlighted physical address - that has the word "Way" in it. + const id = $("#notificationId").val(); - console.log(Office.context.mailbox.item.getFilteredEntitiesByName("sampleFilterName")); -'Office.AppointmentRead#getRegExMatches:member(1)': + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); - >- // 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". + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - console.log(Office.context.mailbox.item.getRegExMatches()); -'Office.AppointmentRead#getRegExMatchesByName:member(1)': + Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); - >- // 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/35-notifications/add-getall-remove.yaml - // This API would only work when you click on highlighted word "ScriptLab". + const id = $("#notificationId").val(); - console.log(Office.context.mailbox.item.getRegExMatchesByName("sampleRegexName")); -'Office.AppointmentRead#getSelectedEntities:member(1)': + Office.context.mailbox.item.notificationMessages.replaceAsync( + id, + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Notification message with id = " + id + " has been replaced with an informational message.", + icon: "icon2", + persistent: false + }, + handleResult); - >- // 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml - let entityTypesFound = 0; + const id = $("#notificationId").val(); - if (entities.addresses.length > 0) { - console.warn("physical addresses: "); - console.log(entities.addresses); - entityTypesFound++; - } + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'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 - if (entities.contacts.length > 0) { - console.warn("contacts: "); - entities.contacts.forEach(function (contact) { console.log(contact.personName); }) - entityTypesFound++; - } + const apptOptionalAttendees = Office.context.mailbox.item.optionalAttendees; - if (entities.emailAddresses.length > 0) { - console.warn("email addresses: "); - console.log(entities.emailAddresses); - entityTypesFound++; - } + console.log("Optional attendees:"); - if (entities.meetingSuggestions.length > 0) { - console.warn("meetings suggestions: "); - entities.meetingSuggestions.forEach(function (meetingSuggestion) { console.log(meetingSuggestion.meetingString); }) - entityTypesFound++; + for (let i = 0; i < apptOptionalAttendees.length; i++) { + console.log( + apptOptionalAttendees[i].displayName + + " (" + + apptOptionalAttendees[i].emailAddress + + ") - response: " + + apptOptionalAttendees[i].appointmentResponse + ); } +'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 - if (entities.phoneNumbers.length > 0) { - console.warn("phone numbers: "); - entities.phoneNumbers.forEach(function (phoneNumber) { console.log(phoneNumber.originalPhoneString); }) - entityTypesFound++; - } + const apptOrganizer = Office.context.mailbox.item.organizer; - if (entities.taskSuggestions.length > 0) { - console.warn("task suggestions: "); - entities.taskSuggestions.forEach(function (taskSuggestion) { console.log(taskSuggestion.taskString); }) - entityTypesFound++; - } + console.log("Organizer: " + apptOrganizer.displayName + " (" + + apptOrganizer.emailAddress + ")"); +'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 - if (entities.urls.length > 0) { - console.warn("URLs: "); - console.log(entities.urls); - entityTypesFound++; - } + const recurrence = Office.context.mailbox.item.recurrence; - if (entityTypesFound == 0) - { - console.error("Open add-in by clicking on a highlighted entity, for this API to return something useful."); + if (recurrence === undefined) { + console.log("This item is a message but not a meeting request."); + } else if (recurrence === null) { + console.log("This is a single appointment."); + } else { + console.log(JSON.stringify(recurrence)); } -'Office.AppointmentRead#getSelectedRegExMatches:member(1)': +'Office.AppointmentRead#requiredAttendees:member': - >- // 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/30-recipients-and-attendees/get-required-attendees-appointment-attendee.yaml - const matches = Office.context.mailbox.item.getSelectedRegExMatches(); + const apptRequiredAttendees = Office.context.mailbox.item.requiredAttendees; - if (matches) { - console.log(matches); - } + console.log("Required attendees:"); - else { - console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); + for (let i = 0; i < apptRequiredAttendees.length; i++) { + console.log( + apptRequiredAttendees[i].displayName + + " (" + + apptRequiredAttendees[i].emailAddress + + ") - response: " + + apptRequiredAttendees[i].appointmentResponse + ); } -'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.AppointmentRead#itemClass:member': +'Office.AppointmentRead#seriesId: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.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 seriesId = Office.context.mailbox.item.seriesId; - 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; + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); } 'Office.AppointmentRead#start:member': - >- @@ -9284,62 +9386,12 @@ 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#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 - - console.log(`Normalized subject: - ${Office.context.mailbox.item.normalizedSubject}`); -'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 - - console.log(`Creation date and time: - ${Office.context.mailbox.item.dateTimeCreated}`); -'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 - - console.log(`Date and time item last modified: - ${Office.context.mailbox.item.dateTimeModified}`); -'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#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 - - console.log(`Appointment location: - ${Office.context.mailbox.item.location}`); -'Office.AppointmentRead#enhancedLocation: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-add-remove-enhancedlocation-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.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}`); - return; - } - const places = result.value; - if (places && places.length > 0) { - result.value.forEach(function(place) { - console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); - if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { - console.log("Email address: " + place.emailAddress); - } - }); - } else { - console.log("There are no locations."); - } - }); + console.log(`Subject: ${Office.context.mailbox.item.subject}`); 'Office.Body#appendOnSendAsync:member(1)': - >- // Link to full sample: @@ -9596,26 +9648,8 @@ Office.context.mailbox.item.body.setSignatureAsync(signature, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("setSignatureAsync succeeded"); - } else { - console.error(asyncResult.error); - } - }); -'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 - - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Categories assigned to this item:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories assigned to this item."); - } + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("setSignatureAsync succeeded"); } else { console.error(asyncResult.error); } @@ -9650,6 +9684,24 @@ console.error(asyncResult.error); } }); +'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 + + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Categories assigned to this item:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories assigned to this item."); + } + } else { + console.error(asyncResult.error); + } + }); 'Office.Categories#removeAsync:member(1)': - >- // Link to full sample: @@ -9688,51 +9740,29 @@ console.log(`The value of custom property "${propertyName}" is "${propertyValue}".`); -'Office.CustomProperties#set: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 const propertyName = $("#propertyName").val(); - const propertyValue = $("#propertyValue").val(); - - customProps.set(propertyName, propertyValue); + customProps.remove(propertyName); - console.log(`Custom property "${propertyName}" set to value - "${propertyValue}".`); -'Office.CustomProperties#remove:member(1)': + console.log(`Custom property "${propertyName}" removed.`); +'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(); - customProps.remove(propertyName); + const propertyValue = $("#propertyValue").val(); - console.log(`Custom property "${propertyName}" removed.`); -'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 + customProps.set(propertyName, propertyValue); - Office.context.mailbox.item.enhancedLocation.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to get locations. Error message: ${result.error.message}`); - return; - } - const places = result.value; - if (places && places.length > 0) { - result.value.forEach(function(place) { - console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); - if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { - console.log("Email address: " + place.emailAddress); - } - }); - } else { - console.log("There are no locations."); - } - }); + console.log(`Custom property "${propertyName}" set to value + "${propertyValue}".`); 'Office.EnhancedLocation#addAsync:member(1)': - >- // Link to full sample: @@ -9757,6 +9787,28 @@ console.error(`Failed to add locations. Error message: ${result.error.message}`); } }); +'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 + + Office.context.mailbox.item.enhancedLocation.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to get locations. Error message: ${result.error.message}`); + return; + } + const places = result.value; + if (places && places.length > 0) { + result.value.forEach(function(place) { + console.log(`Location: ${place.displayName} (type: ${place.locationIdentifier.type})`); + if (place.locationIdentifier.type === Office.MailboxEnums.LocationType.Room) { + console.log("Email address: " + place.emailAddress); + } + }); + } else { + console.log("There are no locations."); + } + }); 'Office.EnhancedLocation#removeAsync:member(1)': - >- // Link to full sample: @@ -9891,116 +9943,81 @@ } console.log(`Successfully set location to ${location}`); }); -'Office.Mailbox#masterCategories:member': +'Office.Mailbox#convertToEwsId:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Master categories:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories in the master list."); - } - } else { - console.error(asyncResult.error); - } - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-master-categories.yaml + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - const masterCategoriesToAdd = [ - { - displayName: "TestCategory", - color: Office.MailboxEnums.CategoryColor.Preset0 - } - ]; + const ewsId = Office.context.mailbox.item.itemId; + console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - Office.context.mailbox.masterCategories.addAsync(masterCategoriesToAdd, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Successfully added categories to master list"); - } else { - console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); - } - }); - - >- - // 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"]; + console.log("REST URL: " + Office.context.mailbox.restUrl); + const restId = Office.context.mailbox.convertToRestId(ewsId, + Office.MailboxEnums.RestVersion.v2_0); - Office.context.mailbox.masterCategories.removeAsync(masterCategoriesToRemove, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Successfully removed categories from master list"); - } else { - console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); - } - }); -'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 + console.log("REST item ID: " + restId); - const itemId = $("#itemId").val(); - Office.context.mailbox.displayAppointmentForm(itemId); -'Office.Mailbox#displayMessageForm:member(1)': + 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/55-display-items/display-existing-message.yaml - - const itemId = $("#itemId").val(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/basic-rest-cors.yaml - Office.context.mailbox.displayMessageForm(itemId); -'Office.Mailbox#displayNewAppointmentForm:member(1)': + 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/55-display-items/display-new-appointment.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/ids-and-urls.yaml - const start = new Date(); + console.log("EWS URL: " + Office.context.mailbox.ewsUrl); - const end = new Date(); + const ewsId = Office.context.mailbox.item.itemId; - end.setHours(start.getHours() + 1); + console.log("EWS item ID: " + Office.context.mailbox.item.itemId); - Office.context.mailbox.displayNewAppointmentForm({ - requiredAttendees: ["bob@contoso.com"], - optionalAttendees: ["sam@contoso.com"], - start: start, - end: end, - location: "Home", - subject: "meeting", - resources: ["projector@contoso.com"], - body: "Hello World!" - }); -'Office.Mailbox#displayNewMessageForm:member(1)': + 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.Mailbox#displayAppointmentForm:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-new-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml - Office.context.mailbox.displayNewMessageForm({ - toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item - ccRecipients: ["sam@contoso.com"], - subject: "Outlook add-ins are cool!", - htmlBody: 'Hello World!
    ', - attachments: [ - { - type: "file", - name: "image.png", - url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", - isInline: true - } - ] - }); + const itemId = $("#itemId").val(); + + Office.context.mailbox.displayAppointmentForm(itemId); 'Office.Mailbox#displayAppointmentFormAsync:member(1)': - >- // Link to full sample: @@ -10017,6 +10034,14 @@ function(asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); +'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 + + const itemId = $("#itemId").val(); + + Office.context.mailbox.displayMessageForm(itemId); 'Office.Mailbox#displayMessageFormAsync:member(1)': - >- // Link to full sample: @@ -10033,6 +10058,28 @@ (asyncResult) { console.log("Result: " + JSON.stringify(asyncResult)); }); +'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 + + const start = new Date(); + + const end = new Date(); + + end.setHours(start.getHours() + 1); + + + Office.context.mailbox.displayNewAppointmentForm({ + requiredAttendees: ["bob@contoso.com"], + optionalAttendees: ["sam@contoso.com"], + start: start, + end: end, + location: "Home", + subject: "meeting", + resources: ["projector@contoso.com"], + body: "Hello World!" + }); 'Office.Mailbox#displayNewAppointmentFormAsync:member(1)': - >- // Link to full sample: @@ -10064,6 +10111,25 @@ console.log(JSON.stringify(asyncResult)); } ); +'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 + + Office.context.mailbox.displayNewMessageForm({ + toRecipients: Office.context.mailbox.item.to, // Copies the To line from current item + ccRecipients: ["sam@contoso.com"], + subject: "Outlook add-ins are cool!", + htmlBody: 'Hello World!
    ', + attachments: [ + { + type: "file", + name: "image.png", + url: "http://www.cutestpaw.com/wp-content/uploads/2011/11/Cute-Black-Dogs-s.jpg", + isInline: true + } + ] + }); 'Office.Mailbox#displayNewMessageFormAsync:member(1)': - >- // Link to full sample: @@ -10092,26 +10158,7 @@ console.log(JSON.stringify(asyncResult)); } ); -'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(); - }); +'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 @@ -10135,7 +10182,7 @@ Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); -'Office.Mailbox#restUrl:member': +'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 @@ -10155,97 +10202,30 @@ } 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/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.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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-callback-token.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); + Office.context.mailbox.getCallbackTokenAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Token retrieval failed with message: ${result.error.message}`); + } else { + console.log(result.value); } - xhr.send(); }); -'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 - - 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.Mailbox#convertToEwsId: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/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); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/user-identity-token.yaml - console.log("EWS ID (from REST ID): " + ewsId2); + 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.Mailbox#makeEwsRequestAsync:member(1)': - >- // Link to full sample: @@ -10308,30 +10288,102 @@ Office.context.mailbox.makeEwsRequestAsync(request, function (result) { console.log(result); }); -'Office.Mailbox#getCallbackTokenAsync:member(2)': +'Office.Mailbox#masterCategories:member': - >- // 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/45-categories/work-with-master-categories.yaml - Office.context.mailbox.getCallbackTokenAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Token retrieval failed with message: ${result.error.message}`); + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Master categories:"); + console.log(JSON.stringify(categories)); } else { - console.log(result.value); + console.log("There are no categories in the master list."); } + } else { + console.error(asyncResult.error); + } }); -'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/45-categories/work-with-master-categories.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); + const masterCategoriesToAdd = [ + { + displayName: "TestCategory", + color: Office.MailboxEnums.CategoryColor.Preset0 + } + ]; + + + Office.context.mailbox.masterCategories.addAsync(masterCategoriesToAdd, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Successfully added categories to master list"); + } else { + console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); + } + }); + - >- + // 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"]; + + + Office.context.mailbox.masterCategories.removeAsync(masterCategoriesToRemove, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Successfully removed categories from master list"); + } else { + 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.AppointmentSensitivityType:enum': - >- // Link to full sample: @@ -10962,33 +11014,15 @@ month: Office.MailboxEnums.Month.Sep }, recurrenceTimeZone: { name: Office.MailboxEnums.RecurrenceTimeZone.PacificStandardTime } - }; - - - Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { - if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); - return; - } - console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); - }); -'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 - - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Master categories:"); - console.log(JSON.stringify(categories)); - } else { - console.log("There are no categories in the master list."); - } - } else { - console.error(asyncResult.error); + }; + + + Office.context.mailbox.item.recurrence.setAsync(pattern, (asyncResult) => { + if (asyncResult.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Failed to set recurrence. Error: ${asyncResult.error.message}`); + return; } + console.log(`Succeeded in setting recurrence pattern ${JSON.stringify(pattern)}`); }); 'Office.MasterCategories#addAsync:member(1)': - >- @@ -11011,6 +11045,24 @@ console.log("masterCategories.addAsync call failed with error: " + asyncResult.error.message); } }); +'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 + + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Master categories:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories in the master list."); + } + } else { + console.error(asyncResult.error); + } + }); 'Office.MasterCategories#removeAsync:member(1)': - >- // Link to full sample: @@ -11027,61 +11079,72 @@ console.log("masterCategories.removeAsync call failed with error: " + asyncResult.error.message); } }); -'Office.MessageCompose#loadCustomPropertiesAsync:member(1)': +'Office.MessageCompose#addFileAttachmentAsync: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.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 { - console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); - } - }); -'Office.MessageCompose#getSelectedDataAsync:member(2)': + const attachmentUrl = $("#attachmentUrl").val(); + + Office.context.mailbox.item.addFileAttachmentAsync( + attachmentUrl, + getFileName(attachmentUrl), + { "asyncContext" : { var1: 1, var2: true } }, + function(result) { console.log(result); }); +'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const text = asyncResult.value.data; - const prop = asyncResult.value.sourceProperty; - console.log("Selected text in " + prop + ": " + text); - } else { - console.error(asyncResult.error); - } - }); -'Office.MessageCompose#setSelectedDataAsync:member(1)': + 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); }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/set-selected-data.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - Office.context.mailbox.item.setSelectedDataAsync("Replaced", - function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Selected text has been updated successfully."); - } else { - console.error(asyncResult.error); + // Set the signature for the current item with inline image. + + const modIcon1Base64 = + "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; + + Office.context.mailbox.item.addFileAttachmentFromBase64Async( + modIcon1Base64, + "myImage.png", + { isInline: true }, + function(result) { + if (result.status == Office.AsyncResultStatus.Succeeded) { + const signature = $("#signature").val() + ""; + console.log(`Setting signature to "${signature}".`); + Office.context.mailbox.item.body.setSignatureAsync( + signature, + { coercionType: "html" }, + function(asyncResult) { + console.log(`setSignatureAsync: ${asyncResult.status}`); + } + ); + } else { + console.error(`addFileAttachmentFromBase64Async: ${result.error}`); + } } - }); -'Office.MessageCompose#close:member(1)': + ); +'Office.MessageCompose#addItemAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.close(); + 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: @@ -11114,17 +11177,19 @@ console.error(asyncResult.error); } }); -'Office.MessageCompose#cc:member': +'Office.MessageCompose#categories: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.cc.getAsync(function(asyncResult) { + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const msgCc = asyncResult.value; - console.log("Message being copied to:"); - for (let i = 0; i < msgCc.length; i++) { - console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); + const categories = asyncResult.value; + if (categories && categories.length > 0) { + console.log("Categories assigned to this item:"); + console.log(JSON.stringify(categories)); + } else { + console.log("There are no categories assigned to this item."); } } else { console.error(asyncResult.error); @@ -11132,254 +11197,130 @@ }); - >- // 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(); - const emailArray = [email]; - - Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting Cc field."); - } else { - console.error(asyncResult.error); - } - }); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.from.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const msgFrom = asyncResult.value; - console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); - } else { - console.error(asyncResult.error); - } - }); -'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 + // Note: In order for you to successfully add a category, - Office.context.mailbox.item.to.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const msgTo = asyncResult.value; - console.log("Message being sent to:"); - for (let i = 0; i < msgTo.length; i++) { - console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); - } - } else { - console.error(asyncResult.error); - } - }); - - >- - // 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 + // it must be in the mailbox categories master list. - const email = $("#emailTo") - .val() - .toString(); - const emailArray = [email]; - Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { + Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Succeeded in setting To field."); - } else { - console.error(asyncResult.error); - } - }); -'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 - - const id = $("#notificationId").val(); - - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, - message: "Progress indicator with id = " + id - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); - - >- - // 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(); - - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Non-persistent informational notification message with id = " + id, - icon: "icon1", - persistent: false - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); - - >- - // 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(); - - const details = - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Persistent informational notification message with id = " + id, - icon: "icon1", - persistent: true - }; - Office.context.mailbox.item.notificationMessages.addAsync(id, details, - handleResult); - - >- - // 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); + const masterCategories = asyncResult.value; + if (masterCategories && masterCategories.length > 0) { + // Grab the first category from the master list. + const categoryToAdd = [masterCategories[0].displayName]; + Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully assigned category '${categoryToAdd}' to item.`); + } else { + console.log("categories.addAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); + } + } else { + console.error(asyncResult.error); + } + }); - >- // 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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml - Office.context.mailbox.item.notificationMessages.replaceAsync( - id, - { - type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, - message: "Notification message with id = " + id + " has been replaced with an informational message.", - icon: "icon2", - persistent: false - }, - handleResult); + Office.context.mailbox.item.categories.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const categories = asyncResult.value; + if (categories && categories.length > 0) { + // Grab the first category assigned to this item. + const categoryToRemove = [categories[0].displayName]; + Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); + } else { + console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("There are no categories assigned to this item."); + } + } else { + console.error(asyncResult.error); + } + }); +'Office.MessageCompose#cc:member': - >- // 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(); + 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.notificationMessages.removeAsync(id, - handleResult); -'Office.MessageCompose#addFileAttachmentAsync:member(1)': + Office.context.mailbox.item.cc.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const msgCc = asyncResult.value; + console.log("Message being copied to:"); + for (let i = 0; i < msgCc.length; i++) { + console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); + } + }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-set-cc-message-compose.yaml - const attachmentUrl = $("#attachmentUrl").val(); + const email = $("#emailCc") + .val() + .toString(); + const emailArray = [email]; - Office.context.mailbox.item.addFileAttachmentAsync( - attachmentUrl, - getFileName(attachmentUrl), - { "asyncContext" : { var1: 1, var2: true } }, - function(result) { console.log(result); }); -'Office.MessageCompose#addItemAttachmentAsync:member(1)': + Office.context.mailbox.item.cc.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting Cc field."); + } else { + console.error(asyncResult.error); + } + }); +'Office.MessageCompose#close: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(); + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/25-item-save-and-close/close.yaml - Office.context.mailbox.item.addItemAttachmentAsync( - attachmentItemId, - "My attachment", - { "asyncContext" : { var3: 3, var4: false } }, - function(result) { console.log(result); }); -'Office.MessageCompose#addFileAttachmentFromBase64Async:member(1)': + Office.context.mailbox.item.close(); +'Office.MessageCompose#conversationId:member': - >- // 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="; + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - base64String, - "logo.png", - { isInline: false }, - function(result) { console.log(result); }); + console.log(`Conversation ID: + ${Office.context.mailbox.item.conversationId}`); +'Office.MessageCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - // Set the signature for the current item with inline image. - - const modIcon1Base64 = - "iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDRDMxMDg1MjBCNDZFMTExODE2MkM1RUI2M0M4MDYxRCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFMTUxQjgyRjQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFMTUxQjgyRTQ2MEQxMUUxODlFMkQwNTYzQ0YwMTUxMiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkQxMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkNEMzEwODUyMEI0NkUxMTE4MTYyQzVFQjYzQzgwNjFEIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+uC/WfAAAAehJREFUeNpilCzfwEAEkAbiECA2A2J1IOaHin8E4ptAfBaIVwLxU0IGMRKw0B6IW4DYhoE4cASIK6E0VsCEQ1wUiNcB8QESLGOAqj0MxBuhZhBloS4QnwHiQAbygR/UDF1CFupCXSjHQDmQg5qli8tCUBBsQUoQ1AD8UDNFsVk4n0o+w+bT+egWglKjNymmeGhLkqLcG2oHAwtUoIuQDj5OVgZPLUmwRe5aEmAxqYqNpFgKssOcCeplM0KqdST5GfpDDRm0JfkYrj3/SE7QguyQY4ImYYLgCtAS10kHGMw6dzNsv/qC7OwCClJXYlR++v6b4er3j5QmIFcmaNlIL6AOslCIjhYKMTHQGTBBqxh6gXcgC6/R0cKbIAv30dHCfaAKGJTxHxJSqS3Fz9DkowNmywpyMcgA8fF7b8D8VWcfM6w8+4gYC+VB+RCk8hSh0gaUD4/dewvlvUWRe/z+GzGWgex4BGtiOAHxXhoHpzMoSGHZAhSPW2lo2VZYWkHOh4nEtLrIAE+hZmNUwK+B2BOIv1PRsu9QM1/jatNcBtVZ0IREKXgENesyoVYbzNIdFFi2A5tl+NqlL6BB4QBNzsSCU1A9nlAzMAALAQMOQl0qB23qWwKxIlIrDBQ394H4OBCvISYqAAIMACVibHDqsO7zAAAAAElFTkSuQmCC"; + // Disable the client signature. - Office.context.mailbox.item.addFileAttachmentFromBase64Async( - modIcon1Base64, - "myImage.png", - { isInline: true }, - function(result) { - if (result.status == Office.AsyncResultStatus.Succeeded) { - const signature = $("#signature").val() + ""; - console.log(`Setting signature to "${signature}".`); - Office.context.mailbox.item.body.setSignatureAsync( - signature, - { coercionType: "html" }, - function(asyncResult) { - console.log(`setSignatureAsync: ${asyncResult.status}`); - } - ); - } else { - console.error(`addFileAttachmentFromBase64Async: ${result.error}`); - } + Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) + { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("disableClientSignatureAsync succeeded"); + } else { + console.error(asyncResult.error); } - ); -'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 - - 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.MessageCompose#removeAttachmentAsync:member(1)': +'Office.MessageCompose#from:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-compose.yaml - 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.from.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const msgFrom = asyncResult.value; + console.log("Message from: " + msgFrom.displayName + " (" + msgFrom.emailAddress + ")"); + } else { + console.error(asyncResult.error); + } + }); 'Office.MessageCompose#getAttachmentContentAsync:member(1)': - >- // Link to full sample: @@ -11411,92 +11352,86 @@ result.asyncContext.currentItem.getAttachmentContentAsync(result.value[i].id, handleAttachmentsCallback); } } -'Office.MessageCompose#categories:member': +'Office.MessageCompose#getAttachmentsAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const categories = asyncResult.value; - if (categories && categories.length > 0) { - console.log("Categories assigned to this item:"); - console.log(JSON.stringify(categories)); + Office.context.mailbox.item.getAttachmentsAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(result.error.message); } else { - console.log("There are no categories assigned to this item."); + 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."); + } } - } else { - console.error(asyncResult.error); - } }); +'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- // 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. - - - Office.context.mailbox.masterCategories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const masterCategories = asyncResult.value; - if (masterCategories && masterCategories.length > 0) { - // Grab the first category from the master list. - const categoryToAdd = [masterCategories[0].displayName]; - Office.context.mailbox.item.categories.addAsync(categoryToAdd, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully assigned category '${categoryToAdd}' to item.`); - } else { - console.log("categories.addAsync call failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("There are no categories in the master list on this mailbox. You can add categories using Office.context.mailbox.masterCategories.addAsync."); - } + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + + // Get the compose type of the current message. + + Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log( + "getComposeTypeAsync succeeded with composeType: " + + asyncResult.value.composeType + + " and coercionType: " + + asyncResult.value.coercionType + ); } else { console.error(asyncResult.error); } }); +'Office.MessageCompose#getItemIdAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/45-categories/work-with-categories.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/85-tokens-and-service-calls/item-id-compose.yaml - Office.context.mailbox.item.categories.getAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const categories = asyncResult.value; - if (categories && categories.length > 0) { - // Grab the first category assigned to this item. - const categoryToRemove = [categories[0].displayName]; - Office.context.mailbox.item.categories.removeAsync(categoryToRemove, function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(`Successfully unassigned category '${categoryToRemove}' from this item.`); - } else { - console.log("categories.removeAsync call failed with error: " + asyncResult.error.message); - } - }); + Office.context.mailbox.item.getItemIdAsync(function (result) { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`getItemIdAsync failed with message: ${result.error.message}`); } else { - console.log("There are no categories assigned to this item."); + console.log(result.value); } - } else { - console.error(asyncResult.error); - } }); -'Office.MessageCompose#seriesId:member': +'Office.MessageCompose#getSelectedDataAsync:member(2)': - >- // 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; - + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-selected-data.yaml - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); - } + Office.context.mailbox.item.getSelectedDataAsync(Office.CoercionType.Text, + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const text = asyncResult.value.data; + const prop = asyncResult.value.sourceProperty; + console.log("Selected text in " + prop + ": " + text); + } else { + console.error(asyncResult.error); + } + }); 'Office.MessageCompose#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: @@ -11557,52 +11492,21 @@ ); } }); -'Office.MessageCompose#getItemIdAsync:member(2)': +'Office.MessageCompose#internetHeaders:member': - >- // 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/70-mime-headers/manage-custom-internet-headers-message-compose.yaml - Office.context.mailbox.item.getItemIdAsync(function (result) { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`getItemIdAsync failed with message: ${result.error.message}`); + Office.context.mailbox.item.internetHeaders.getAsync( + ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], + function (asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Selected headers: " + JSON.stringify(asyncResult.value)); } else { - console.log(result.value); + console.log("Error getting selected headers: " + JSON.stringify(asyncResult.error)); } - }); -'Office.MessageCompose#getComposeTypeAsync:member(2)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - - // Get the compose type of the current message. - - Office.context.mailbox.item.getComposeTypeAsync(function(asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log( - "getComposeTypeAsync succeeded with composeType: " + - asyncResult.value.composeType + - " and coercionType: " + - asyncResult.value.coercionType - ); - } else { - console.error(asyncResult.error); - } - }); -'Office.MessageCompose#disableClientSignatureAsync:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - - // Disable the client signature. - - Office.context.mailbox.item.disableClientSignatureAsync(function(asyncResult) - { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("disableClientSignatureAsync succeeded"); - } else { - console.error(asyncResult.error); } - }); + ); 'Office.MessageCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: @@ -11618,31 +11522,6 @@ console.error(asyncResult.error); } }); -'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 - - Office.context.mailbox.item.subject.getAsync((result) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Subject: ${result.value}`); - }); - - >- - // 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) => { - if (result.status !== Office.AsyncResultStatus.Succeeded) { - console.error(`Action failed with message ${result.error.message}`); - return; - } - console.log(`Successfully set subject to ${subject}`); - }); 'Office.MessageCompose#itemType:member': - >- // Link to full sample: @@ -11658,41 +11537,7 @@ console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } -'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 - - console.log(`Conversation ID: - ${Office.context.mailbox.item.conversationId}`); -'Office.MessageCompose#sessionData:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/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)); - } else { - console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); - } - }); -'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 - - Office.context.mailbox.item.internetHeaders.getAsync( - ["x-preferred-fruit", "x-preferred-vegetable", "x-best-vegetable", "x-nonexistent-header"], - function (asyncResult) { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("Selected headers: " + JSON.stringify(asyncResult.value)); - } else { - console.log("Error getting selected headers: " + JSON.stringify(asyncResult.error)); - } - } - ); -'Office.MessageRead#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 @@ -11711,93 +11556,9 @@ } else { console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); - } - }); -'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 - - const msgCc = Office.context.mailbox.item.cc; - - console.log("Message copied to:"); - - for (let i = 0; i < msgCc.length; i++) { - console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); - } -'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 + " (" + - msgFrom.emailAddress + ")"); -'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 - - const msgSender = Office.context.mailbox.item.sender; - - console.log("Sender: " + msgSender.displayName + " (" + - msgSender.emailAddress + ")"); -'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 = []; - - const externalRecipients = []; - - const internalRecipients = []; - - const otherRecipients = []; - - for (let i = 0; i < msgTo.length; i++) { - switch (msgTo[i].recipientType) { - case Office.MailboxEnums.RecipientType.DistributionList: - distributionLists.push(msgTo[i]); - break; - case Office.MailboxEnums.RecipientType.ExternalUser: - externalRecipients.push(msgTo[i]); - break; - case Office.MailboxEnums.RecipientType.User: - internalRecipients.push(msgTo[i]); - break; - case Office.MailboxEnums.RecipientType.Other: - otherRecipients.push(msgTo[i]); - } - } - - - if (distributionLists.length > 0) { - console.log("Distribution Lists:"); - distributionLists.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); - } - - - if (externalRecipients.length > 0) { - console.log("External Recipients:"); - externalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); - } - - - if (internalRecipients.length > 0) { - console.log("Internal Recipients:"); - internalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); - } - - - if (otherRecipients.length > 0) { - console.log("Other Recipients:"); - otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); - } -'Office.MessageRead#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 @@ -11869,27 +11630,172 @@ Office.context.mailbox.item.notificationMessages.removeAsync(id, handleResult); -'Office.MessageRead#getAttachmentContentAsync:member(1)': +'Office.MessageCompose#removeAttachmentAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/attachments-compose.yaml - // Gets the attachments of the current message or appointment in read mode. + 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.MessageCompose#sensitivityLabel:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - // The item.attachments call can only be used in read mode. + // This snippet gets the current mail item's sensitivity label. - const attachments = item.attachments; + 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); + } + }); + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - if (attachments.length <= 0) { - console.log("Mail item has no attachments."); - return; - } + // This snippet sets the sensitivity label on the current mail item. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + if (catalog.length > 0) { + var id = catalog[0].id; + Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.status); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + else { + console.log("Catalog list is empty"); + } + } 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: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + const seriesId = Office.context.mailbox.item.seriesId; - for (let i = 0; i < attachments.length; i++) { - // Log the attachment type and its contents to the console. - item.getAttachmentContentAsync(attachments[i].id, handleAttachmentsCallback); + + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); } +'Office.MessageCompose#sessionData:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/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)); + } else { + console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); +'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 + + Office.context.mailbox.item.setSelectedDataAsync("Replaced", + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Selected text has been updated successfully."); + } else { + console.error(asyncResult.error); + } + }); +'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 + + Office.context.mailbox.item.subject.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Subject: ${result.value}`); + }); + - >- + // 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) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + console.log(`Successfully set subject to ${subject}`); + }); +'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 + + Office.context.mailbox.item.to.getAsync(function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const msgTo = asyncResult.value; + console.log("Message being sent to:"); + for (let i = 0; i < msgTo.length; i++) { + console.log(msgTo[i].displayName + " (" + msgTo[i].emailAddress + ")"); + } + } else { + console.error(asyncResult.error); + } + }); + - >- + // 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(); + const emailArray = [email]; + + Office.context.mailbox.item.to.setAsync(emailArray, function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("Succeeded in setting To field."); + } else { + console.error(asyncResult.error); + } + }); 'Office.MessageRead#attachments:member': - >- // Link to full sample: @@ -11969,36 +11875,57 @@ console.error(asyncResult.error); } }); -'Office.MessageRead#recurrence:member': +'Office.MessageRead#cc:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-recurrence-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-cc-message-read.yaml - const recurrence = Office.context.mailbox.item.recurrence; + const msgCc = Office.context.mailbox.item.cc; + console.log("Message copied to:"); - if (recurrence === undefined) { - console.log("This item is a message but not a meeting request."); - } else if (recurrence === null) { - console.log("This is a single appointment."); - } else { - console.log(JSON.stringify(recurrence)); + for (let i = 0; i < msgCc.length; i++) { + console.log(msgCc[i].displayName + " (" + msgCc[i].emailAddress + ")"); } -'Office.MessageRead#seriesId:member': +'Office.MessageRead#conversationId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml - const seriesId = Office.context.mailbox.item.seriesId; + console.log(`Conversation ID: + ${Office.context.mailbox.item.conversationId}`); +'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 + + console.log(`Creation date and time: + ${Office.context.mailbox.item.dateTimeCreated}`); +'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 + console.log(`Date and time item last modified: + ${Office.context.mailbox.item.dateTimeModified}`); +'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 - if (seriesId === undefined) { - console.log("This is a message that's not a meeting request."); - } else if (seriesId === null) { - console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); - } else { - console.log("This is an instance belonging to series with ID " + seriesId); - } + Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with + some bold text."); +'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 + + Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL + with some bold text.", function( + asyncResult + ) { + console.log(JSON.stringify(asyncResult)); + }); 'Office.MessageRead#displayReplyForm:member(1)': - >- // Link to full sample: @@ -12023,13 +11950,6 @@ } } }); -'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 - - Office.context.mailbox.item.displayReplyAllForm("This is a reply ALL with - some bold text."); 'Office.MessageRead#displayReplyFormAsync:member(1)': - >- // Link to full sample: @@ -12061,77 +11981,67 @@ console.log(JSON.stringify(asyncResult)); } ); -'Office.MessageRead#displayReplyAllFormAsync:member(1)': +'Office.MessageRead#end:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-end-read.yaml - Office.context.mailbox.item.displayReplyAllFormAsync("This is a reply ALL - with some bold text.", function( - asyncResult - ) { - console.log(JSON.stringify(asyncResult)); - }); -'Office.MessageRead#getSharedPropertiesAsync:member(2)': + 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/65-delegates-and-shared-folders/get-shared-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-from-message-read.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on an item from a shared folder."); - return; - } + const msgFrom = Office.context.mailbox.item.from; + console.log("Message received from: " + msgFrom.displayName + " (" + + msgFrom.emailAddress + ")"); +'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 - Office.context.mailbox.item.getSharedPropertiesAsync(function(result) { - console.log(result.value); + 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)); + } else { + console.log("Didn't receive header with sender's preferred fruit"); + } + if (asyncResult.value.match(/x-preferred-vegetable:.*/gim)) { + console.log( + "Sender's preferred vegetable: " + asyncResult.value.match(/x-preferred-vegetable:.*/gim)[0].slice(23) + ); + } else { + console.log("Didn't receive header with sender's preferred vegetable"); + } + } else { + console.log("Error getting internet headers: " + JSON.stringify(asyncResult.error)); + } }); -'Office.MessageRead#getSharedPropertiesAsync:member(1)': +'Office.MessageRead#getAttachmentContentAsync: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml - if (!Office.context.mailbox.item.getSharedPropertiesAsync) { - console.error("Try this sample on a message from a shared folder."); - return; - } + // Gets the attachments of the current message or appointment in read mode. + // The item.attachments call can only be used in read mode. - 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; + const attachments = item.attachments; - // 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; + if (attachments.length <= 0) { + console.log("Mail item has no attachments."); + return; + } - $.ajax({ - url: rest_url, - dataType: "json", - headers: { Authorization: "Bearer " + result2.asyncContext } - }) - .done(function(response) { - console.log(response); - }) - .fail(function(error) { - console.error(error); - }); - } - } - ); - } - }); + + for (let i = 0; i < attachments.length; i++) { + // 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: @@ -12289,12 +12199,66 @@ else { console.error("Open add-in by clicking on a highlighted regex match, for this API to return something useful."); } -'Office.MessageRead#subject:member': +'Office.MessageRead#getSharedPropertiesAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/65-delegates-and-shared-folders/get-shared-properties.yaml - console.log(`Subject: ${Office.context.mailbox.item.subject}`); + 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.MessageRead#internetMessageId:member': - >- // Link to full sample: @@ -12305,23 +12269,169 @@ '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 + 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) { + 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.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 + + 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 { + console.error(`loadCustomPropertiesAsync failed with message ${result.error.message}`); + } + }); +'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 + + console.log(`Appointment location: + ${Office.context.mailbox.item.location}`); +'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 + + console.log(`Normalized subject: + ${Office.context.mailbox.item.normalizedSubject}`); +'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 + + const id = $("#notificationId").val(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.ProgressIndicator, + message: "Progress indicator with id = " + id + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // 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(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Non-persistent informational notification message with id = " + id, + icon: "icon1", + persistent: false + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // 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(); + + const details = + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Persistent informational notification message with id = " + id, + icon: "icon1", + persistent: true + }; + Office.context.mailbox.item.notificationMessages.addAsync(id, details, + handleResult); + - >- + // 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); + - >- + // 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(); + + Office.context.mailbox.item.notificationMessages.replaceAsync( + id, + { + type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage, + message: "Notification message with id = " + id + " has been replaced with an informational message.", + icon: "icon2", + persistent: false + }, + handleResult); + - >- + // 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(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); +'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 + + const recurrence = Office.context.mailbox.item.recurrence; + + + if (recurrence === undefined) { + console.log("This item is a message but not a meeting request."); + } else if (recurrence === null) { + console.log("This is a single appointment."); + } else { + console.log(JSON.stringify(recurrence)); + } +'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 - console.log(`Item class: ${Office.context.mailbox.item.itemClass}`); -'Office.MessageRead#itemType:member': + const msgSender = Office.context.mailbox.item.sender; + + console.log("Sender: " + msgSender.displayName + " (" + + msgSender.emailAddress + ")"); +'Office.MessageRead#seriesId:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-item-type.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/50-recurrence/get-series-id.yaml - const itemType = Office.context.mailbox.item.itemType; + const seriesId = Office.context.mailbox.item.seriesId; - 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; + + if (seriesId === undefined) { + console.log("This is a message that's not a meeting request."); + } else if (seriesId === null) { + console.log("This is a single appointment, a parent series, or a meeting request for a series or single meeting."); + } else { + console.log("This is an instance belonging to series with ID " + seriesId); } 'Office.MessageRead#start:member': - >- @@ -12329,72 +12439,66 @@ 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#normalizedSubject: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-normalized-subject-read.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-subject-read.yaml - console.log(`Normalized subject: - ${Office.context.mailbox.item.normalizedSubject}`); -'Office.MessageRead#conversationId:member': + 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/90-other-item-apis/get-conversation-id-message.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/30-recipients-and-attendees/get-to-message-read.yaml - console.log(`Conversation ID: - ${Office.context.mailbox.item.conversationId}`); -'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 + const msgTo = Office.context.mailbox.item.to; - console.log(`Creation date and time: - ${Office.context.mailbox.item.dateTimeCreated}`); -'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 + const distributionLists = []; - console.log(`Date and time item last modified: - ${Office.context.mailbox.item.dateTimeModified}`); -'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 + const externalRecipients = []; - console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); -'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 + const internalRecipients = []; - console.log(`Appointment location: - ${Office.context.mailbox.item.location}`); -'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 + const otherRecipients = []; - 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)); - } else { - console.log("Didn't receive header with sender's preferred fruit"); - } - if (asyncResult.value.match(/x-preferred-vegetable:.*/gim)) { - console.log( - "Sender's preferred vegetable: " + asyncResult.value.match(/x-preferred-vegetable:.*/gim)[0].slice(23) - ); - } else { - console.log("Didn't receive header with sender's preferred vegetable"); + for (let i = 0; i < msgTo.length; i++) { + switch (msgTo[i].recipientType) { + case Office.MailboxEnums.RecipientType.DistributionList: + distributionLists.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.ExternalUser: + externalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.User: + internalRecipients.push(msgTo[i]); + break; + case Office.MailboxEnums.RecipientType.Other: + otherRecipients.push(msgTo[i]); } - } else { - console.log("Error getting internet headers: " + JSON.stringify(asyncResult.error)); - } - }); + } + + + if (distributionLists.length > 0) { + console.log("Distribution Lists:"); + distributionLists.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (externalRecipients.length > 0) { + console.log("External Recipients:"); + externalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (internalRecipients.length > 0) { + console.log("Internal Recipients:"); + internalRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } + + + if (otherRecipients.length > 0) { + console.log("Other Recipients:"); + otherRecipients.forEach((recipient) => console.log(`${recipient.displayName}, ${recipient.emailAddress}`)); + } 'Office.NotificationMessages#addAsync:member(1)': - >- // Link to full sample: @@ -12458,6 +12562,15 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/35-notifications/add-getall-remove.yaml Office.context.mailbox.item.notificationMessages.getAllAsync(handleResult); +'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(); + + Office.context.mailbox.item.notificationMessages.removeAsync(id, + handleResult); 'Office.NotificationMessages#replaceAsync:member(1)': - >- // Link to full sample: @@ -12474,15 +12587,6 @@ persistent: false }, handleResult); -'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(); - - Office.context.mailbox.item.notificationMessages.removeAsync(id, - handleResult); 'Office.Organizer#getAsync:member(1)': - >- // Link to full sample: @@ -12749,18 +12853,6 @@ $("#settingValue").val(settingValue); console.log(`The value of setting "${settingName}" is "${settingValue}".`); -'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 - - const settingName = $("#settingName").val(); - - const settingValue = $("#settingValue").val(); - - Office.context.roamingSettings.set(settingName, settingValue); - - console.log(`Setting "${settingName}" set to value "${settingValue}".`); 'Office.RoamingSettings#saveAsync:member(1)': - >- // Link to full sample: @@ -12775,6 +12867,18 @@ console.log(`Settings saved with status: ${result.status}`); } }); +'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 + + const settingName = $("#settingName").val(); + + const settingValue = $("#settingValue").val(); + + Office.context.roamingSettings.set(settingName, settingValue); + + console.log(`Setting "${settingName}" set to value "${settingValue}".`); 'Office.Sensitivity#getAsync:member(2)': - >- // Link to full sample: @@ -12802,33 +12906,106 @@ } } ); -'Office.SessionData#setAsync:member(1)': +'Office.SensitivityLabel#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - Office.context.mailbox.item.sessionData.setAsync( - "Date", - "7/24/2020", - function(asyncResult) { + // 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.SensitivityLabel#setAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml + + // This snippet sets the sensitivity label on the current mail item. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + if (catalog.length > 0) { + var id = catalog[0].id; + Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.status); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + else { + console.log("Catalog list is empty"); + } + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); +'Office.SensitivityLabelsCatalog#getAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + + // This snippet gets all available sensitivity labels from the catalog. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + console.log("Sensitivity Labels Catalog:"); + console.log(JSON.stringify(catalog)); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); +'Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + + // This snippet determines if the sensitivity labels catalog is enabled on + the current mailbox. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("sessionData.setAsync succeeded"); + console.log(asyncResult.value); } else { - console.log("Failed to set sessionData. Error: " + JSON.stringify(asyncResult.error)); + console.log("Action failed with error: " + asyncResult.error.message); } }); -'Office.SessionData#getAsync:member(1)': +'Office.SessionData#clearAsync:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml - Office.context.mailbox.item.sessionData.getAsync( - "Date", - function(asyncResult) { + Office.context.mailbox.item.sessionData.clearAsync(function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("The sessionData value is " + JSON.stringify(asyncResult.value)); + console.log("sessionData.clearAsync succeeded"); } else { - console.log("Failed to get sessionData. Error: " + JSON.stringify(asyncResult.error)); + console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); 'Office.SessionData#getAllAsync:member(1)': @@ -12843,6 +13020,20 @@ console.log("Failed to get all sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); +'Office.SessionData#getAsync:member(1)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + + Office.context.mailbox.item.sessionData.getAsync( + "Date", + function(asyncResult) { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log("The sessionData value is " + JSON.stringify(asyncResult.value)); + } else { + console.log("Failed to get sessionData. Error: " + JSON.stringify(asyncResult.error)); + } + }); 'Office.SessionData#removeAsync:member(1)': - >- // Link to full sample: @@ -12858,16 +13049,19 @@ } } ); -'Office.SessionData#clearAsync:member(1)': +'Office.SessionData#setAsync:member(1)': - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml - Office.context.mailbox.item.sessionData.clearAsync(function(asyncResult) { + Office.context.mailbox.item.sessionData.setAsync( + "Date", + "7/24/2020", + function(asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log("sessionData.clearAsync succeeded"); + console.log("sessionData.setAsync succeeded"); } else { - console.log("Failed to clear sessionData. Error: " + JSON.stringify(asyncResult.error)); + console.log("Failed to set sessionData. Error: " + JSON.stringify(asyncResult.error)); } }); 'Office.Time#getAsync:member(2)': diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 601c90df2..f68525247 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -74,8 +74,8 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", - "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index b4f2d8687..4b6063e27 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -74,8 +74,8 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", - "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml" } \ No newline at end of file From 215de3bc289c1e1cc4c6a7e4267f947b7fe6217a Mon Sep 17 00:00:00 2001 From: Alison McKay Date: Thu, 26 Jan 2023 11:38:28 -0800 Subject: [PATCH 141/336] [Excel] (Data types) Add icons enum to entity sample (#748) --- .../20-data-types/data-types-entity-values.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 eb04c1260..08ea49176 100644 --- a/samples/excel/20-data-types/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -86,6 +86,9 @@ script: } }, layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.shoppingBag + }, card: { title: { property: "Product Name" }, sections: [ @@ -145,6 +148,11 @@ script: type: Excel.CellValueType.string, basicValue: category.description || "" } + }, + layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.branch + }, } }; @@ -176,6 +184,9 @@ script: }, }, layouts: { + compact: { + icon: Excel.EntityCompactLayoutIcons.boxMultiple + }, card: { title: { property: "Company Name" }, sections: [ @@ -573,6 +584,7 @@ template: Add entity values

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

    +

    Note: In Excel on Mac, nested icons (such as the icons that display inside an entity card) always display as the default icon, even when another icon is selected with the API. This is a known bug.

language: html style: From 45f7f40a9021ab770b3d64e2e10780329bf0b294 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 27 Jan 2023 10:40:02 -0800 Subject: [PATCH 142/336] [Outlook] (sensitivity label) Remove sensitivity label snippets from preview (#751) --- playlists-prod/outlook.yaml | 22 -- playlists/outlook.yaml | 22 -- .../sensitivity-labels-catalog.yaml | 84 -------- .../99-preview-apis/sensitivity-labels.yaml | 101 --------- snippet-extractor-metadata/outlook.xlsx | Bin 23716 -> 23438 bytes snippet-extractor-output/snippets.yaml | 194 ------------------ view-prod/outlook.json | 4 +- view/outlook.json | 4 +- 8 files changed, 2 insertions(+), 429 deletions(-) delete mode 100644 samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml delete mode 100644 samples/outlook/99-preview-apis/sensitivity-labels.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 1052d47fe..0079656a4 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -721,27 +721,5 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels-catalog - name: Work with the sensitivity labels catalog - fileName: sensitivity-labels-catalog.yaml - description: >- - Determines if sensitivity labels are enabled on the mailbox and retrieves - all available labels from the catalog. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels - name: Work with sensitivity labels (Compose) - fileName: sensitivity-labels.yaml - description: >- - Gets and sets the sensitivity label on a message or appointment in compose - mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.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 2f775039a..1e4be2a52 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -723,25 +723,3 @@ group: Preview APIs api_set: Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels-catalog - name: Work with the sensitivity labels catalog - fileName: sensitivity-labels-catalog.yaml - description: >- - Determines if sensitivity labels are enabled on the mailbox and retrieves - all available labels from the catalog. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels - name: Work with sensitivity labels (Compose) - fileName: sensitivity-labels.yaml - description: >- - Gets and sets the sensitivity label on a message or appointment in compose - mode. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml - group: Preview APIs - api_set: - Mailbox: preview diff --git a/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml b/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml deleted file mode 100644 index ee54f1313..000000000 --- a/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml +++ /dev/null @@ -1,84 +0,0 @@ -order: 3 -id: outlook-sensitivity-labels-sensitivity-labels-catalog -name: Work with the sensitivity labels catalog -description: Determines if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog. -host: OUTLOOK -api_set: - Mailbox: preview -script: - content: | - $("#get-sensitivity-labels-enabled").click(getSensitivityLabelsCatalogIsEnabled); - $("#get-sensitivity-labels-catalog").click(getSensitivityLabelsCatalog); - - function getSensitivityLabelsCatalogIsEnabled() { - // This snippet determines if the sensitivity labels catalog is enabled on the current mailbox. - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(asyncResult.value); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } - - function getSensitivityLabelsCatalog() { - // This snippet gets all available sensitivity labels from the catalog. - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { - Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const catalog = asyncResult.value; - console.log("Sensitivity Labels Catalog:"); - console.log(JSON.stringify(catalog)); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } - language: typescript -template: - content: |- -
-

This sample shows how to determine if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog.

-

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-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/99-preview-apis/sensitivity-labels.yaml b/samples/outlook/99-preview-apis/sensitivity-labels.yaml deleted file mode 100644 index 1615a3f9e..000000000 --- a/samples/outlook/99-preview-apis/sensitivity-labels.yaml +++ /dev/null @@ -1,101 +0,0 @@ -order: 4 -id: outlook-sensitivity-labels-sensitivity-labels -name: Work with sensitivity labels (Compose) -description: Gets and sets the sensitivity label on a message or appointment in compose mode. -host: OUTLOOK -api_set: - Mailbox: preview -script: - content: | - $("#get-sensitivity-label").click(getCurrentSensitivityLabel); - $("#set-sensitivity-label").click(setSensitivityLabel); - - function getCurrentSensitivityLabel() { - // 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); - } - }); - } - - function setSensitivityLabel() { - // This snippet sets the sensitivity label on the current mail item. - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { - Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const catalog = asyncResult.value; - if (catalog.length > 0) { - var id = catalog[0].id; - Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(asyncResult.status); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } - else { - console.log("Catalog list is empty"); - } - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } - language: typescript -template: - content: |- -
-

This sample shows how to get and set the sensitivity label on a 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-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/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 86ae2ead6e06979e7d4c1acedf0494ef3926e679..612d7111f109fe241a4bf976bd75d5b16d5ebbe3 100644 GIT binary patch delta 13472 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 z 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 KPu2XV&Hn(zrW6DK delta 13727 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 - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.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); - } - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - - // This snippet sets the sensitivity label on the current mail item. - - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { - Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const catalog = asyncResult.value; - if (catalog.length > 0) { - var id = catalog[0].id; - Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(asyncResult.status); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } - else { - console.log("Catalog list is empty"); - } - } 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: @@ -11647,58 +11595,6 @@ } } ); -'Office.MessageCompose#sensitivityLabel:member': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.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); - } - }); - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - - // This snippet sets the sensitivity label on the current mail item. - - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { - Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const catalog = asyncResult.value; - if (catalog.length > 0) { - var id = catalog[0].id; - Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(asyncResult.status); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } - else { - console.log("Catalog list is empty"); - } - } 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: @@ -12906,96 +12802,6 @@ } } ); -'Office.SensitivityLabel#getAsync:member(2)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.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.SensitivityLabel#setAsync:member(2)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml - - // This snippet sets the sensitivity label on the current mail item. - - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { - Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const catalog = asyncResult.value; - if (catalog.length > 0) { - var id = catalog[0].id; - Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(asyncResult.status); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } - else { - console.log("Catalog list is empty"); - } - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); -'Office.SensitivityLabelsCatalog#getAsync:member(2)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - - // This snippet gets all available sensitivity labels from the catalog. - - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { - Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - const catalog = asyncResult.value; - console.log("Sensitivity Labels Catalog:"); - console.log(JSON.stringify(catalog)); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); -'Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - - // This snippet determines if the sensitivity labels catalog is enabled on - the current mailbox. - - Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { - if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { - console.log(asyncResult.value); - } else { - console.log("Action failed with error: " + asyncResult.error.message); - } - }); 'Office.SessionData#clearAsync:member(1)': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index f68525247..a4d601e5a 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -75,7 +75,5 @@ "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels.yaml" + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 4b6063e27..3f2a30fd3 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -75,7 +75,5 @@ "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-labels": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels.yaml" + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" } \ No newline at end of file From f19c813047ffb1e535342c3cbbb042cf8d4e2bf1 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Tue, 31 Jan 2023 10:35:43 -0800 Subject: [PATCH 143/336] [Outlook] (prepend-on-send) Add link to conceptual article from Script Lab snippet (#753) --- samples/outlook/99-preview-apis/prepend-text-on-send.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/outlook/99-preview-apis/prepend-text-on-send.yaml b/samples/outlook/99-preview-apis/prepend-text-on-send.yaml index e689cfe58..84d875ef0 100644 --- a/samples/outlook/99-preview-apis/prepend-text-on-send.yaml +++ b/samples/outlook/99-preview-apis/prepend-text-on-send.yaml @@ -41,7 +41,7 @@ template:

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. +

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.

From fc27e8df56077f7e6a8febb814a85ef9cf27adbb Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Tue, 31 Jan 2023 11:09:16 -0800 Subject: [PATCH 144/336] Remove duplicate Excel snippets (#749) --- package-lock.json | 2939 ------------------------ snippet-extractor-metadata/excel.xlsx | Bin 28299 -> 27995 bytes snippet-extractor-output/snippets.yaml | 2320 +++++++++---------- 3 files changed, 1099 insertions(+), 4160 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index a12217796..000000000 --- a/package-lock.json +++ /dev/null @@ -1,2939 +0,0 @@ -{ - "name": "office-js-snippets", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "office-js-snippets", - "version": "1.0.0", - "license": "MIT", - "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", - "lodash": "^4.17.21", - "node-status": "^1.0.0", - "rimraf": "^3.0.0", - "shelljs": "^0.8.5", - "yarn": "^1.22.19" - }, - "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" - }, - "engines": { - "node": ">=6.10.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@fast-csv/format": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", - "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", - "license": "MIT", - "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" - } - }, - "node_modules/@fast-csv/format/node_modules/@types/node": { - "version": "14.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", - "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==", - "license": "MIT" - }, - "node_modules/@fast-csv/parse": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", - "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", - "license": "MIT", - "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" - } - }, - "node_modules/@fast-csv/parse/node_modules/@types/node": { - "version": "14.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", - "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==", - "license": "MIT" - }, - "node_modules/@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/fs-extra/node_modules/@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glob/node_modules/@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/js-yaml": { - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.175", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", - "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "11.15.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz", - "integrity": "sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/shelljs": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", - "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "node_modules/@types/shelljs/node_modules/@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "license": "MIT", - "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" - } - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/async": { - "version": "3.2.1", - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/big-integer": { - "version": "1.6.49", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", - "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "license": "MIT", - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-indexof-polyfill": { - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "license": "MIT/X11", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - } - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "license": "MIT", - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/charm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", - "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", - "license": "MIT/X11", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "license": "MIT", - "dependencies": { - "restore-cursor": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-spinners": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", - "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/compress-commons": { - "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==", - "license": "MIT", - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "license": "Apache-2.0", - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - }, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", - "license": "MIT" - }, - "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, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "license": "BSD-3-Clause", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "license": "MIT", - "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" - } - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/end-of-stream": { - "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==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/exceljs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", - "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/fast-csv": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", - "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", - "license": "MIT", - "dependencies": { - "@fast-csv/format": "4.3.5", - "@fast-csv/parse": "4.3.6" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/fs-constants": { - "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==", - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "license": "ISC" - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "license": "ISC", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "license": "MIT" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "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==", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jszip": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "license": "MIT", - "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" - } - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "license": "MIT", - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "license": "MIT", - "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" - } - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "license": "ISC" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "license": "MIT" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "license": "MIT" - }, - "node_modules/lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "license": "MIT" - }, - "node_modules/lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "license": "MIT" - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "license": "MIT" - }, - "node_modules/lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "license": "MIT" - }, - "node_modules/lodash.isundefined": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", - "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=", - "license": "MIT" - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "license": "MIT" - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/node-status": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", - "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", - "dependencies": { - "charm": "1.0.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "0.2.0", - "colors": "1.1.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", - "license": "Apache-2.0", - "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/process-nextick-args": { - "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==", - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "license": "MIT", - "dependencies": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "license": "MIT" - }, - "node_modules/shelljs": { - "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" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "license": "BSD-3-Clause" - }, - "node_modules/string_decoder": { - "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==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "license": "MIT/X11" - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "license": "Apache-2.0", - "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" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "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" - } - }, - "node_modules/tslint/node_modules/ansi-styles": { - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslint/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/tslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "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" - } - }, - "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "license": "MIT", - "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" - } - }, - "node_modules/unzipper/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "license": "MIT", - "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" - } - }, - "node_modules/unzipper/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "license": "ISC" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "license": "MIT" - }, - "node_modules/yarn": { - "version": "1.22.19", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", - "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==", - "hasInstallScript": true, - "bin": { - "yarn": "bin/yarn.js", - "yarnpkg": "bin/yarn.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "license": "MIT", - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.15.8", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", - "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "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==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@fast-csv/format": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@fast-csv/format/-/format-4.3.5.tgz", - "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", - "requires": { - "@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" - }, - "dependencies": { - "@types/node": { - "version": "14.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", - "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" - } - } - }, - "@fast-csv/parse": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@fast-csv/parse/-/parse-4.3.6.tgz", - "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", - "requires": { - "@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" - }, - "dependencies": { - "@types/node": { - "version": "14.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.21.tgz", - "integrity": "sha512-zv8ukKci1mrILYiQOwGSV4FpkZhyxQtuFWGya2GujWg+zVAeRQ4qbaMmWp9vb9889CFA8JECH7lkwCL6Ygg8kA==" - } - } - }, - "@types/chalk": { - "version": "0.4.31", - "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-0.4.31.tgz", - "integrity": "sha1-ox10JBprHtu5c8822XooloNKUfk=", - "dev": true - }, - "@types/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-eCk6aKrT2GZ1Ho/P1k19ydARdHY=", - "dev": true, - "requires": { - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true - } - } - }, - "@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==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true - } - } - }, - "@types/js-yaml": { - "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==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.175", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", - "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/node": { - "version": "11.15.54", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.15.54.tgz", - "integrity": "sha512-1RWYiq+5UfozGsU6MwJyFX6BtktcT10XRjvcAQmskCtMcW3tPske88lM/nHv7BQG1w9KBXI1zPGuu5PnNCX14g==", - "dev": true - }, - "@types/shelljs": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz", - "integrity": "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "archiver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", - "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", - "requires": { - "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" - } - }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "requires": { - "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" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "async": { - "version": "3.2.1" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "big-integer": { - "version": "1.6.49", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.49.tgz", - "integrity": "sha512-KJ7VhqH+f/BOt9a3yMwJNmcZjG53ijWMTjSAGMveQWyLwqIiwkjNP5PFgDob3Snnx86SjDj6I89fIbv0dkQeNw==" - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-indexof-polyfill": { - "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==" - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "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" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "charm": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.1.tgz", - "integrity": "sha1-aFZqelU9T+kXlwMN0YUtDdbvqC0=", - "requires": { - "inherits": "^2.0.1" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "cli-spinners": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.2.0.tgz", - "integrity": "sha1-hQeHN5E7iA9uyf/ntl6D7Hd2KE8=" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" - }, - "commander": { - "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==", - "dev": true - }, - "compress-commons": { - "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==", - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, - "crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", - "requires": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - } - }, - "dayjs": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", - "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "end-of-stream": { - "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==", - "requires": { - "once": "^1.4.0" - } - }, - "escape-string-regexp": { - "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": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "exceljs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", - "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", - "requires": { - "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": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "exit-on-epipe": { - "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": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-csv/-/fast-csv-4.3.6.tgz", - "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", - "requires": { - "@fast-csv/format": "4.3.5", - "@fast-csv/parse": "4.3.6" - } - }, - "fs-constants": { - "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": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "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": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-core-module": { - "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==", - "requires": { - "has": "^1.0.3" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jszip": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", - "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "requires": { - "readable-stream": "^2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" - }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.groupby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" - }, - "lodash.isnil": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", - "integrity": "sha1-SeKM1VkBNFjIFMVHnTxmOiG/qmw=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isundefined": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", - "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" - }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "node-status": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status/-/node-status-1.0.0.tgz", - "integrity": "sha1-eQanxHplh9A0lr907GNKuqA/joA=", - "requires": { - "charm": "1.0.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "0.2.0", - "colors": "1.1.2" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "printj": { - "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": { - "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": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdir-glob": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", - "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-immediate-shim": { - "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": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "string_decoder": { - "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==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "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": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "requires": { - "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" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "yarn": { - "version": "1.22.19", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", - "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==" - }, - "zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", - "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", - "readable-stream": "^3.6.0" - } - } - } -} diff --git a/snippet-extractor-metadata/excel.xlsx b/snippet-extractor-metadata/excel.xlsx index d7f62f99e61fa0e361ecd1aabe6fe8d7a5efde12..1b2f497d05251cd3c70b9c691da0563e97451f21 100644 GIT binary patch delta 20926 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%0DV!|(ov+CzaC?Hw;Q$Ia(G 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%0DpGWrJ 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 PFoc{d6<&(tZ>9eM=`O6@ diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 377c64968..32c00f8de 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -1,28 +1,3 @@ -'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 - - /** @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. - * @param {number} interval - The time in milliseconds to wait before the next increment on the cell. - * @param {CustomFunctions.StreamingInvocation} invocation - Parameter to send results to Excel - * or respond to the user canceling the function. - * @returns An incrementing value. - */ - function increment(amount: number, interval: number, invocation: - CustomFunctions.StreamingInvocation): void { - let result = 0; - const timer = setInterval(() => { - result += amount; - invocation.setResult(result); - }, interval); - - invocation.onCanceled = () => { - clearInterval(timer); - } - } 'Excel.AggregationFunction:enum': - >- // Link to full sample: @@ -40,40 +15,6 @@ await context.sync(); }); } -'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 - - await Excel.run(async (context) => { - // Recreate the data in the worksheet with random data. - const sheet = context.workbook.worksheets.getActiveWorksheet(); - - const startTime = Date.now(); - console.log("Starting..."); - - // If other parts of the sample have toggled screen painting off, this will stop screen updating until context.sync is called. - if (pauseScreenPainting) { - context.application.suspendScreenUpdatingUntilNextSync(); - } - - for (let i = 1; i < ROW_COUNT; i++) { - for (let j = 1; j < COLUMN_COUNT; j++) { - let cell = sheet.getCell(i, j); - cell.values = [[i * j * Math.random()]]; - - // If other parts of the sample have toggled tracking off, we will avoid tracking this range and having to manage the proxy objects. - // For more information, see https://learn.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects - if (untrack) { - cell.untrack(); - } - } - } - - await context.sync(); - - console.log(`Ending. Adding ${ROW_COUNT * COLUMN_COUNT} cells took ${Date.now() - startTime} milliseconds`); - }); 'Excel.Application#calculate:member(1)': - >- // Link to full sample: @@ -110,6 +51,40 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + // Recreate the data in the worksheet with random data. + const sheet = context.workbook.worksheets.getActiveWorksheet(); + + const startTime = Date.now(); + console.log("Starting..."); + + // If other parts of the sample have toggled screen painting off, this will stop screen updating until context.sync is called. + if (pauseScreenPainting) { + context.application.suspendScreenUpdatingUntilNextSync(); + } + + for (let i = 1; i < ROW_COUNT; i++) { + for (let j = 1; j < COLUMN_COUNT; j++) { + let cell = sheet.getCell(i, j); + cell.values = [[i * j * Math.random()]]; + + // If other parts of the sample have toggled tracking off, we will avoid tracking this range and having to manage the proxy objects. + // For more information, see https://learn.microsoft.com/office/dev/add-ins/concepts/resource-limits-and-performance-optimization#untrack-unneeded-proxy-objects + if (untrack) { + cell.untrack(); + } + } + } + + await context.sync(); + + console.log(`Ending. Adding ${ROW_COUNT * COLUMN_COUNT} cells took ${Date.now() - startTime} milliseconds`); + }); 'Excel.ArrowheadLength:enum': - >- // Link to full sample: @@ -200,35 +175,35 @@ await context.sync(); }); -'Excel.AutoFilter#reapply: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 - // This function refreshes the AutoFilter to ensure that changes are - captured. + // This function clears the AutoFilter setting from one column. await Excel.run(async (context) => { // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Reapply the filter to capture changes. - sheet.autoFilter.reapply(); + // Clear the filter from only column 3. + sheet.autoFilter.clearColumnCriteria(3); await context.sync(); }); -'Excel.AutoFilter#clearColumnCriteria: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 - // This function clears the AutoFilter setting from one column. + // This function refreshes the AutoFilter to ensure that changes are + captured. await Excel.run(async (context) => { // Retrieve the active worksheet. const sheet = context.workbook.worksheets.getActiveWorksheet(); - // Clear the filter from only column 3. - sheet.autoFilter.clearColumnCriteria(3); + // Reapply the filter to capture changes. + sheet.autoFilter.reapply(); await context.sync(); }); 'Excel.AutoFilter#remove:member(1)': @@ -917,25 +892,7 @@ console.log("The pie chart is NOT active."); }); } -'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 - - // This function adds a data table to a chart that already exists on the - worksheet. - - await Excel.run(async (context) => { - // Retrieve the chart named "SalesChart" from the "Sample" worksheet. - const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); - - // Get the data table object for the chart and set it to visible. - const chartDataTable = chart.getDataTableOrNullObject(); - chartDataTable.load("visible"); - chartDataTable.visible = true; - await context.sync(); - }); -'Excel.ChartDataTable#showLegendKey: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 @@ -993,7 +950,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#showVerticalBorder: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 @@ -1051,7 +1008,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTable#format: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 @@ -1080,7 +1037,25 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTableFormat#font: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 + + // This function adds a data table to a chart that already exists on the + worksheet. + + await Excel.run(async (context) => { + // Retrieve the chart named "SalesChart" from the "Sample" worksheet. + const chart = context.workbook.worksheets.getItem("Sample").charts.getItem("SalesChart"); + + // Get the data table object for the chart and set it to visible. + const chartDataTable = chart.getDataTableOrNullObject(); + chartDataTable.load("visible"); + chartDataTable.visible = true; + await context.sync(); + }); +'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 @@ -1109,7 +1084,7 @@ chartDataTableFormat.border.color = "blue"; await context.sync(); }); -'Excel.ChartDataTableFormat#border: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 @@ -1176,30 +1151,25 @@ await context.sync(); }); -'Excel.ChartSeries#getDimensionValues: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-bubble-chart.yaml + 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(); - // 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); + if (seriesCollection.count > 0) { + const series = seriesCollection.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); + // Delete the first series. + series.delete(); + } await context.sync(); - - // Log the information. - console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); 'Excel.ChartSeries#getDimensionDataSourceString:member(1)': - >- @@ -1253,113 +1223,50 @@ console.log(series.name + " data source string: " + dataSourceString.value); console.log(series.name + " data source type: " + dataSourceType.value); }); -'Excel.ChartSeries#setBubbleSizes: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 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); + // The sample chart is of type `Excel.ChartType.bubble`. + const bubbleChart = sheet.charts.getItem("Product Chart"); - // Create the chart. - const bubbleChart = sheet.charts.add(Excel.ChartType.bubble, valueRange); - bubbleChart.name = "Product Chart"; + // Get the first series in the chart. + const firstSeries = bubbleChart.series.getItemAt(0); - // Remove the default series, since we want a unique series for each row. - bubbleChart.series.getItemAt(0).delete(); + // 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); - // 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(); + // Log the information. + console.log(`Series ${category.value} - X:${xValues.value},Y:${yValues.value},Bubble:${bubbleSize.value}`); }); -'Excel.ChartSeries#delete:member(1)': +'Excel.ChartSeries#markerBackgroundColor:member': - >- // 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-series-markers.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); + let sheet = context.workbook.worksheets.getItem("Sample"); + let salesTable = sheet.tables.getItem("SalesTable"); + let dataRange = sheet.getRange("A1:E7"); - // 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': - - >- - // 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"); - let dataRange = sheet.getRange("A1:E7"); - - // Create an XY scatter chart. - let chart = sheet.charts.add("XYScatterSmooth", dataRange, "Auto"); - chart.title.text = "Bicycle Parts Quarterly Sales"; - - let series = chart.series; - let series0 = series.getItemAt(0); - let series1 = series.getItemAt(1); - let series2 = series.getItemAt(2); - let series3 = series.getItemAt(3); + // Create an XY scatter chart. + let chart = sheet.charts.add("XYScatterSmooth", dataRange, "Auto"); + chart.title.text = "Bicycle Parts Quarterly Sales"; + + let series = chart.series; + let series0 = series.getItemAt(0); + let series1 = series.getItemAt(1); + let series2 = series.getItemAt(2); + let series3 = series.getItemAt(3); // Set markers. series0.markerStyle = "Dash"; @@ -1469,6 +1376,74 @@ await context.sync(); }); +'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 + + 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: @@ -1596,24 +1571,6 @@ // 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"); - - let seriesCollection = sheet.charts.getItemAt(0).series; - - // Get the color of the chart trendline. - let trendline = seriesCollection.getItemAt(0).trendlines.getItem(0); - let line = trendline.format.line; - line.load("color"); - - await context.sync(); - - console.log("The trendline color is:" + line.color); - }); - - >- - // 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"); @@ -1702,6 +1659,17 @@ }; conditionalFormat.colorScale.criteria = criteria; + await context.sync(); + }); +'Excel.Comment#content:member': + - >- + // 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); + comment.content = "PLEASE add headers here."; await context.sync(); }); 'Excel.Comment#delete:member(1)': @@ -1726,17 +1694,6 @@ console.log(`${comment.creationDate.toDateString()}: ${comment.authorName} (${comment.authorEmail})`); await context.sync(); }); -'Excel.Comment#content:member': - - >- - // 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); - comment.content = "PLEASE add headers here."; - await context.sync(); - }); 'Excel.Comment#resolved:member': - >- // Link to full sample: @@ -1868,33 +1825,33 @@ console.log(` ID: ${event.commentDetails[0].commentId}`); }); } -'Excel.CommentReply#delete:member(1)': +'Excel.CommentReply#content:member': - >- // 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"); const comment = sheet.comments.getItemAt(0); - comment.replies.getItemAt(0).delete(); + const reply = comment.replies.getItemAt(0); + reply.load("content"); + // Sync to load the content of the comment reply. + await context.sync(); + + // Append "Please!" to the end of the comment reply. + reply.content += " Please!"; await context.sync(); }); -'Excel.CommentReply#content:member': +'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 await Excel.run(async (context) => { + // Remove the first comment reply from this worksheet's first comment. const sheet = context.workbook.worksheets.getItem("Comments"); const comment = sheet.comments.getItemAt(0); - const reply = comment.replies.getItemAt(0); - reply.load("content"); - // Sync to load the content of the comment reply. - await context.sync(); - - // Append "Please!" to the end of the comment reply. - reply.content += " Please!"; + comment.replies.getItemAt(0).delete(); await context.sync(); }); 'Excel.CommentReplyCollection#add:member(1)': @@ -1977,36 +1934,6 @@ await context.sync(); }); -'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 - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const worksheetRange = sheet.getRange(); - worksheetRange.conditionalFormats.load("type"); - - await context.sync(); - - let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; - worksheetRange.conditionalFormats.items.forEach(item => { - cfRangePairs.push({ - cf: item, - range: item.getRange().load("address") - }); - }); - - await context.sync(); - - if (cfRangePairs.length > 0) { - cfRangePairs.forEach(item => { - console.log(item.cf.type); - }); - } else { - console.log("No conditional formats applied."); - } - }); 'Excel.ConditionalFormat#cellValue:member': - >- // Link to full sample: @@ -2069,6 +1996,36 @@ await context.sync(); }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Sample"); + const worksheetRange = sheet.getRange(); + worksheetRange.conditionalFormats.load("type"); + + await context.sync(); + + let cfRangePairs: { cf: Excel.ConditionalFormat, range: Excel.Range }[] = []; + worksheetRange.conditionalFormats.items.forEach(item => { + cfRangePairs.push({ + cf: item, + range: item.getRange().load("address") + }); + }); + + await context.sync(); + + if (cfRangePairs.length > 0) { + cfRangePairs.forEach(item => { + console.log(item.cf.type); + }); + } else { + console.log("No conditional formats applied."); + } + }); 'Excel.ConditionalFormat#iconSet:member': - >- // Link to full sample: @@ -2471,20 +2428,6 @@ } ]; - await context.sync(); - }); - - >- - // 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"); - const conditionalFormat = range.conditionalFormats - .add(Excel.ConditionalFormatType.containsText); - conditionalFormat.textComparison.format.font.color = "red"; - conditionalFormat.textComparison.rule = { operator: Excel.ConditionalTextOperator.contains, text: "Delayed" }; - await context.sync(); }); 'Excel.ConditionalIconCriterion#type:member': @@ -2781,18 +2724,42 @@ await context.sync(); }); -'Excel.CustomXmlPart#setXml:member(1)': +'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 await Excel.run(async (context) => { - const settings = context.workbook.settings; - const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); - await context.sync(); + // You must have the xmlns attribute to populate the + // CustomXml.namespaceUri property. + const originalXml = "JuanHongSally"; + const customXmlPart = context.workbook.customXmlParts.add(originalXml); + customXmlPart.load("id"); + const xmlBlob = customXmlPart.getXml(); - if (xmlPartIDSetting.value) { - const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); + await context.sync(); + + const readableXml = addLineBreaksToXML(xmlBlob.value); + $("#display-xml").text(readableXml); + + // Store the XML part's ID in a setting. + const settings = context.workbook.settings; + settings.add("ContosoReviewXmlPartId", customXmlPart.id); + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + const settings = context.workbook.settings; + const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); + await context.sync(); + + if (xmlPartIDSetting.value) { + const customXmlPart = context.workbook.customXmlParts.getItem(xmlPartIDSetting.value); // The setXml method does a whole-for-whole replacement // of the entire XML. @@ -2805,7 +2772,7 @@ await context.sync(); } }); -'Excel.CustomXmlPart#id:member': +'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 @@ -2829,27 +2796,35 @@ await context.sync(); }); -'Excel.CustomXmlPartCollection#add: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/create-set-get-and-delete-custom-xml-parts.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) => { - // You must have the xmlns attribute to populate the - // CustomXml.namespaceUri property. - const originalXml = "JuanHongSally"; - const customXmlPart = context.workbook.customXmlParts.add(originalXml); - customXmlPart.load("id"); - const xmlBlob = customXmlPart.getXml(); + $("#display-xml").text(""); + 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(); - const readableXml = addLineBreaksToXML(xmlBlob.value); - $("#display-xml").text(readableXml); + if (numberOfPartsInNamespace.value == 1) { + const onlyXmlPartInNamespace = filteredXmlParts.getOnlyItem(); + const xmlBlob = onlyXmlPartInNamespace.getXml(); - // Store the XML part's ID in a setting. - const settings = context.workbook.settings; - settings.add("ContosoReviewXmlPartId", customXmlPart.id); + await context.sync(); + + // 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}`); + + } else { + console.log(`There are ${numberOfPartsInNamespace.value} XML parts with namespace ${contosoNamespace}. There should be exactly 1.`); + } await context.sync(); }); @@ -2877,7 +2852,7 @@ await context.sync(); } }); -'Excel.CustomXmlPartCollection#getByNamespace: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 @@ -2941,38 +2916,6 @@ await context.sync(); } }); -'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 - - await Excel.run(async (context) => { - $("#display-xml").text(""); - 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<"); - - $("#display-xml").text(`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.CustomXmlPartScopedCollection#getOnlyItem:member(1)': - >- // Link to full sample: @@ -3017,6 +2960,20 @@ .add(Excel.ConditionalFormatType.dataBar); conditionalFormat.dataBar.barDirection = Excel.ConditionalDataBarDirection.leftToRight; + 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.DataPivotHierarchy#showAs:member': @@ -3045,20 +3002,6 @@ 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: @@ -4036,56 +3979,56 @@ farmSheet.horizontalPageBreaks.add("A21:E21"); await context.sync(); }); -'Excel.PageLayout#setPrintArea:member(1)': +'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 await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.setPrintArea("A1:D41"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -'Excel.PageLayout#setPrintTitleRows:member(1)': +'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 await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.setPrintTitleRows("$1:$1"); + farmSheet.pageLayout.centerHorizontally = true; + farmSheet.pageLayout.centerVertically = true; await context.sync(); }); -'Excel.PageLayout#centerHorizontally: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 await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = true; + farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; await context.sync(); }); -'Excel.PageLayout#centerVertically:member': +'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 await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.centerHorizontally = true; - farmSheet.pageLayout.centerVertically = true; + farmSheet.pageLayout.setPrintArea("A1:D41"); await context.sync(); }); -'Excel.PageLayout#orientation:member': +'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 await Excel.run(async (context) => { const farmSheet = context.workbook.worksheets.getItem("Print"); - farmSheet.pageLayout.orientation = Excel.PageOrientation.landscape; + farmSheet.pageLayout.setPrintTitleRows("$1:$1"); await context.sync(); }); 'Excel.PageLayout#zoom:member': @@ -4278,70 +4221,34 @@ 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#displayBlankLineAfterEachItem:member(1)': - - >- - // 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"); - const pivotLayout = pivotTable.layout; - - pivotLayout.displayBlankLineAfterEachItem(true); - console.log("Setting `PivotLayout.displayBlankLineAfterEachItem` to true."); - - await context.sync(); - }); -'Excel.PivotLayout#repeatAllItemLabels:member(1)': +'Excel.PivotLayout#altTextDescription:member': - >- // 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. + // Set the alt text for the displayed PivotTable. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); const pivotLayout = pivotTable.layout; - pivotLayout.repeatAllItemLabels(true); - console.log("Setting `PivotLayout.repeatAllItemLabels` to true."); + pivotLayout.altTextTitle = "Farm Sales PivotTable"; + pivotLayout.altTextDescription = "A summary of fruit sales. It is pivoted on farm name, and fruit type. The aggregated data is both the sums of crates sold at the farms and the sums of crates sold wholesale."; + console.log("Adding alt text. Check the PivotTable settings to see the changes."); await context.sync(); }); -'Excel.PivotLayout#altTextDescription:member': +'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 await Excel.run(async (context) => { - // Set the alt text for the displayed PivotTable. + // Add a blank row after each PivotItem in the row hierarchy. const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); const pivotLayout = pivotTable.layout; - pivotLayout.altTextTitle = "Farm Sales PivotTable"; - pivotLayout.altTextDescription = "A summary of fruit sales. It is pivoted on farm name, and fruit type. The aggregated data is both the sums of crates sold at the farms and the sums of crates sold wholesale."; - console.log("Adding alt text. Check the PivotTable settings to see the changes."); + pivotLayout.displayBlankLineAfterEachItem(true); + console.log("Setting `PivotLayout.displayBlankLineAfterEachItem` to true."); await context.sync(); }); @@ -4380,6 +4287,27 @@ 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: @@ -4420,6 +4348,21 @@ console.log(`Preserve the formatting PivotTable after a refresh? - ${preserveFormattingToSet}`); pivotLayout.preserveFormatting = preserveFormattingToSet; + await context.sync(); + }); +'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 + + 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"); + const pivotLayout = pivotTable.layout; + + pivotLayout.repeatAllItemLabels(true); + console.log("Setting `PivotLayout.repeatAllItemLabels` to true."); + await context.sync(); }); 'Excel.PivotLayout#showColumnGrandTotals:member': @@ -4485,22 +4428,76 @@ await context.sync(); }); -'Excel.PivotTable#delete:member(1)': +'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 await Excel.run(async (context) => { - context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); + + // Check if the PivotTable already has a column. + const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); + column.load("id"); + await context.sync(); + + if (column.isNullObject) { + // Adding the farm column to the column hierarchy automatically removes it from the row hierarchy. + pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); + } else { + pivotTable.columnHierarchies.remove(column); + } await context.sync(); }); -'Excel.PivotTable#getDataSourceString:member(1)': +'Excel.PivotTable#dataHierarchies:member': - >- // 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. + 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")); + pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); + + await context.sync(); + }); +'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 + + await Excel.run(async (context) => { + context.workbook.worksheets.getItem("Pivot").pivotTables.getItem("Farm Sales").delete(); + + await context.sync(); + }); +'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 + + 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(); + + // 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#getDataSourceString:member(1)': + - >- + // 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) => { const worksheet = context.workbook.worksheets.getItem("TotalPivot"); @@ -4535,54 +4532,6 @@ console.log("Data source: " + pivotTableDataSourceString.value); console.log("Source type: " + pivotTableDataSourceType.value); }); -'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 - - // This function refreshes the "Farm Sales" PivotTable, - - // which updates the PivotTable with changes made to the source table. - - await Excel.run(async (context) => { - const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); - pivotTable.refresh(); - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const pivotTable = context.workbook.worksheets.getActiveWorksheet().pivotTables.getItem("Farm Sales"); - - // Check if the PivotTable already has a column. - const column = pivotTable.columnHierarchies.getItemOrNullObject("Farm"); - column.load("id"); - await context.sync(); - - if (column.isNullObject) { - // Adding the farm column to the column hierarchy automatically removes it from the row hierarchy. - pivotTable.columnHierarchies.add(pivotTable.hierarchies.getItem("Farm")); - } else { - pivotTable.columnHierarchies.remove(column); - } - - await context.sync(); - }); -'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 - - 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")); - pivotTable.dataHierarchies.add(pivotTable.hierarchies.getItem("Crates Sold Wholesale")); - - await context.sync(); - }); 'Excel.PivotTable#layout:member': - >- // Link to full sample: @@ -4604,26 +4553,20 @@ await context.sync(); console.log("Pivot layout is now " + pivotTable.layout.layoutType); }); -'Excel.PivotTable#filterHierarchies:member': +'Excel.PivotTable#refresh:member(1)': - >- // 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-refresh.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(); + // This function refreshes the "Farm Sales" PivotTable, - // 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(); - } - }); - } + // which updates the PivotTable with changes made to the source table. + + await Excel.run(async (context) => { + const pivotTable = context.workbook.pivotTables.getItem("Farm Sales"); + pivotTable.refresh(); + await context.sync(); + }); 'Excel.PivotTableCollection#add:member(1)': - >- // Link to full sample: @@ -4665,251 +4608,82 @@ await context.sync(); }); +'Excel.Range#autoFill:member(1)': - >- // 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"); - const conditionalFormat = range.conditionalFormats.add(Excel.ConditionalFormatType.custom); - conditionalFormat.custom.rule.formula = '=IF(B8>INDIRECT("RC[-1]",0),TRUE)'; - conditionalFormat.custom.format.font.color = "green"; - - await context.sync(); - }); -'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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-auto-fill.yaml await Excel.run(async (context) => { - // Direct dependents are cells that contain formulas that refer to other cells. - let range = context.workbook.getActiveCell(); - let directDependents = range.getDirectDependents(); - range.load("address"); - directDependents.areas.load("address"); - await context.sync(); - - console.log(`Direct dependent cells of ${range.address}:`); + const sheet = context.workbook.worksheets.getActiveWorksheet(); + const sumCell = sheet.getRange("P4"); - // Use the direct dependents API to loop through direct dependents of the active cell. - for (let i = 0; i < directDependents.areas.items.length; i++) { - // Highlight and print the address of each dependent cell. - directDependents.areas.items[i].format.fill.color = "Yellow"; - console.log(` ${directDependents.areas.items[i].address}`); - } - 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}`); - } + // 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#getMergedAreasOrNullObject: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-merged-ranges.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.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(); - - // 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}`); + const sheet = context.workbook.worksheets.getItem("Sample"); + // Place a label in front of the copied data. + sheet.getRange("F2").values = [["Copied Formula"]]; - await context.sync(); + // 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#merge: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-merged-ranges.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.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#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#ungroup:member(1)': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml + const sheet = context.workbook.worksheets.getItem("Sample"); + const table = sheet.tables.getItem("ExpensesTable"); + const searchRange = table.getRange(); - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + // NOTE: If no match is found, an ItemNotFound error + // is thrown when Range.find is evaluated. + const foundRange = searchRange.find($("#searchText").val().toString(), { + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle + }); - // 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); + foundRange.load("address"); await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const activeRange = context.workbook.getSelectedRange(); - - // Get all the PivotTables that intersect with this range. - const partiallyContainedPivotTables = activeRange.getPivotTables(); - // Get all the PivotTables that are completely contained within this range. - const fullyContainedPivotTables = activeRange.getPivotTables(true); - - partiallyContainedPivotTables.load("name"); - 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}`); - }); - }); -'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(); + console.log(foundRange.address); }); -'Excel.Range#getSpecialCells: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-areas.yaml + 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 foundRange = searchRange.findOrNullObject($("#searchText").val().toString(), { + completeMatch: isCompleteMatchToggle, + matchCase: isMatchCaseToggle, + searchDirection: searchDirectionToggle + }); + + foundRange.load("address"); + await context.sync(); - 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(); + if (foundRange.isNullObject) { + console.log("Text not found"); + } else { + console.log(foundRange.address); + } }); 'Excel.Range#getCellProperties:member(1)': - >- @@ -4939,180 +4713,79 @@ 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)': +'Excel.Range#getDependents:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-copyfrom.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-dependents.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:"]]; + // This function highlights all the dependent cells of the active cell. - // Move the range from A1:E1 to G12:K12. - sheet.getRange("A1:E1").moveTo("G12"); - 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 + // Dependent cells contain formulas that refer to other cells. 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(); + // 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(`Copying the table headers spilled into ${spillRange.address}.`); + 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#find: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-find.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-direct-dependents.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 foundRange = searchRange.find($("#searchText").val().toString(), { - completeMatch: isCompleteMatchToggle, - matchCase: isMatchCaseToggle, - searchDirection: searchDirectionToggle - }); - - foundRange.load("address"); - await context.sync(); - - - console.log(foundRange.address); + // Direct dependents are cells that contain formulas that refer to other cells. + let range = context.workbook.getActiveCell(); + let directDependents = range.getDirectDependents(); + range.load("address"); + directDependents.areas.load("address"); + await context.sync(); + + console.log(`Direct dependent cells of ${range.address}:`); + + // Use the direct dependents API to loop through direct dependents of the active cell. + for (let i = 0; i < directDependents.areas.items.length; i++) { + // Highlight and print the address of each dependent cell. + directDependents.areas.items[i].format.fill.color = "Yellow"; + console.log(` ${directDependents.areas.items[i].address}`); + } + await context.sync(); }); -'Excel.Range#findOrNullObject:member(1)': +'Excel.Range#getDirectPrecedents:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-find.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/precedents.yaml await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Sample"); - const table = sheet.tables.getItem("ExpensesTable"); - const searchRange = table.getRange(); - const foundRange = searchRange.findOrNullObject($("#searchText").val().toString(), { - completeMatch: isCompleteMatchToggle, - matchCase: isMatchCaseToggle, - searchDirection: searchDirectionToggle - }); - - foundRange.load("address"); - await context.sync(); + // 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(); - if (foundRange.isNullObject) { - console.log("Text not found"); - } else { - console.log(foundRange.address); - } + 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#getExtendedRange:member(1)': - >- @@ -5137,31 +4810,6 @@ ); extendedRange.select(); - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - // Get the selected range. - const range = context.workbook.getSelectedRange(); - - // Specify the direction with the `KeyboardDirection` enum. - const direction = Excel.KeyboardDirection.up; - - // Get the active cell in the workbook. - const activeCell = context.workbook.getActiveCell(); - - // Get the top-most cell of the current used range. - // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. - const rangeEdge = range.getRangeEdge( - direction, - activeCell // If the selected range contains more than one cell, the active cell must be defined. - ); - rangeEdge.select(); - await context.sync(); }); 'Excel.Range#getIntersectionOrNullObject:member(1)': @@ -5223,6 +4871,145 @@ 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-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(); + + // 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#getPivotTables:member(1)': + - >- + // 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(); + + // Get all the PivotTables that intersect with this range. + const partiallyContainedPivotTables = activeRange.getPivotTables(); + // Get all the PivotTables that are completely contained within this range. + const fullyContainedPivotTables = activeRange.getPivotTables(true); + + partiallyContainedPivotTables.load("name"); + 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}`); + }); + }); +'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#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 + + await Excel.run(async (context) => { + // Get the selected range. + const range = context.workbook.getSelectedRange(); + + // Specify the direction with the `KeyboardDirection` enum. + const direction = Excel.KeyboardDirection.up; + + // Get the active cell in the workbook. + const activeCell = context.workbook.getActiveCell(); + + // Get the top-most cell of the current used range. + // This method acts like the Ctrl+Arrow key keyboard shortcut while a range is selected. + const rangeEdge = range.getRangeEdge( + direction, + activeCell // If the selected range contains more than one cell, the active cell must be defined. + ); + rangeEdge.select(); + + 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#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#getUsedRange:member(1)': - >- // Link to full sample: @@ -5282,22 +5069,6 @@ 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#getUsedRangeOrNullObject:member(1)': - >- // Link to full sample: @@ -5335,29 +5106,103 @@ await context.sync(); }); -'Excel.Range#set:member(1)': +'Excel.Range#group:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/90-scenarios/multiple-property-set.yaml + 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("Sample"); + const sheet = context.workbook.worksheets.getItem("Orders"); - const range = sheet.getRange("B2:E2"); - range.set({ - format: { - fill: { - color: "#4472C4" - }, - font: { - name: "Verdana", - color: "white" - } + 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 } - }) - range.format.autofitColumns(); + 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 @@ -5376,6 +5221,82 @@ targetRange.format.autofitColumns(); await context.sync(); }); +'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#sort:member': - >- // Link to full sample: @@ -5405,35 +5326,6 @@ 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#style:member': - >- // Link to full sample: @@ -5448,6 +5340,22 @@ range.style = Excel.BuiltInStyle.neutral; range.format.horizontalAlignment = "Right"; + await context.sync(); + }); +'Excel.Range#ungroup: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(); + + // 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#valuesAsJson:member': @@ -5900,6 +5808,21 @@ shapes.items.forEach((shape) => shape.delete()); await context.sync(); }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace); + shape.left = 300; + shape.top = 100; + shape.height = 100; + shape.width = 100; + shape.fill.foregroundColor = "yellow" + await context.sync(); + }); 'Excel.Shape#getAsImage:member(1)': - >- // Link to full sample: @@ -5915,15 +5838,18 @@ // 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#group: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-groups.yaml await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.getItem("Image"); - shape.incrementRotation(180); + + const shapeGroup = sheet.shapes.getItem("Group").group; + shapeGroup.ungroup(); + console.log("Shapes ungrouped"); + await context.sync(); }); 'Excel.Shape#incrementLeft:member(1)': @@ -5937,6 +5863,17 @@ shape.incrementLeft(-25); await context.sync(); }); +'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 + + await Excel.run(async (context) => { + const sheet = context.workbook.worksheets.getItem("Shapes"); + const shape = sheet.shapes.getItem("Image"); + shape.incrementRotation(180); + await context.sync(); + }); 'Excel.Shape#incrementTop:member(1)': - >- // Link to full sample: @@ -5948,19 +5885,25 @@ shape.incrementTop(25); await context.sync(); }); -'Excel.Shape#scaleHeight:member(1)': +'Excel.Shape#line:member': - >- // 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-lines.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); + const shapes = context.workbook.worksheets.getItem("Shapes").shapes; + const line = shapes.getItem("StraightLine").line; + line.beginArrowheadLength = Excel.ArrowheadLength.long; + line.beginArrowheadWidth = Excel.ArrowheadWidth.wide; + line.beginArrowheadStyle = Excel.ArrowheadStyle.oval; + + line.endArrowheadLength = Excel.ArrowheadLength.long; + line.endArrowheadWidth = Excel.ArrowheadWidth.wide; + line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; + await context.sync(); }); -'Excel.Shape#setZOrder:member(1)': +'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 @@ -5968,22 +5911,8 @@ await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getItem("Shapes"); const shape = sheet.shapes.getItem("Octagon") - shape.setZOrder(Excel.ShapeZOrder.sendBackward); - await context.sync(); - }); -'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 - - await Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getItem("Shapes"); - const shape = sheet.shapes.addGeometricShape(Excel.GeometricShapeType.smileyFace); - shape.left = 300; - shape.top = 100; - shape.height = 100; - shape.width = 100; - shape.fill.foregroundColor = "yellow" + shape.lockAspectRatio = true; + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); 'Excel.Shape#rotation:member': @@ -6002,39 +5931,19 @@ shape.fill.clear(); await context.sync(); }); -'Excel.Shape#group:member': +'Excel.Shape#scaleHeight:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/44-shape/shape-groups.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 shapeGroup = sheet.shapes.getItem("Group").group; - shapeGroup.ungroup(); - console.log("Shapes ungrouped"); - - await context.sync(); - }); -'Excel.Shape#line:member': - - >- - // 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; - line.beginArrowheadLength = Excel.ArrowheadLength.long; - line.beginArrowheadWidth = Excel.ArrowheadWidth.wide; - line.beginArrowheadStyle = Excel.ArrowheadStyle.oval; - - line.endArrowheadLength = Excel.ArrowheadLength.long; - line.endArrowheadWidth = Excel.ArrowheadWidth.wide; - line.endArrowheadStyle = Excel.ArrowheadStyle.triangle; - + const shape = sheet.shapes.getItem("Octagon") + shape.lockAspectRatio = true; + shape.scaleHeight(1.25, Excel.ShapeScaleType.currentSize); await context.sync(); }); -'Excel.Shape#lockAspectRatio:member': +'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 @@ -6042,8 +5951,7 @@ 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); + shape.setZOrder(Excel.ShapeZOrder.sendBackward); await context.sync(); }); 'Excel.ShapeAutoSize:enum': @@ -6388,6 +6296,31 @@ await context.sync(); }); } +'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 + + /** @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. + * @param {number} interval - The time in milliseconds to wait before the next increment on the cell. + * @param {CustomFunctions.StreamingInvocation} invocation - Parameter to send results to Excel + * or respond to the user canceling the function. + * @returns An incrementing value. + */ + function increment(amount: number, interval: number, invocation: + CustomFunctions.StreamingInvocation): void { + let result = 0; + const timer = setInterval(() => { + result += amount; + invocation.setResult(result); + }, interval); + + invocation.onCanceled = () => { + clearInterval(timer); + } + } 'Excel.Style#delete:member(1)': - >- // Link to full sample: @@ -6404,26 +6337,6 @@ console.log("Successfully deleted the diagonal orientation style from the Home tab ribbon."); }); -'Excel.Style#load:member(1)': - - >- - // 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"); - - await context.sync(); - - console.log("Orientation: " + style.textOrientation); - console.log("Horizontal alignment: " + style.horizontalAlignment); - console.log("Add indent: " + style.autoIndent); - console.log("Reading order: " + style.readingOrder); - console.log("Wrap text: " + style.wrapText); - console.log("Include protection: " + style.includeProtection); - console.log("Shrink to fit: " + style.shrinkToFit); - console.log("Style locked: " + style.locked); - }); 'Excel.Style#font:member': - >- // Link to full sample: @@ -6459,6 +6372,26 @@ await context.sync(); }); +'Excel.Style#load:member(1)': + - >- + // 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"); + + await context.sync(); + + console.log("Orientation: " + style.textOrientation); + console.log("Horizontal alignment: " + style.horizontalAlignment); + console.log("Add indent: " + style.autoIndent); + console.log("Reading order: " + style.readingOrder); + console.log("Wrap text: " + style.wrapText); + console.log("Include protection: " + style.includeProtection); + console.log("Shrink to fit: " + style.shrinkToFit); + console.log("Style locked: " + style.locked); + }); 'Excel.StyleCollection#add:member(1)': - >- // Link to full sample: @@ -6509,21 +6442,6 @@ console.log("Successfully added a new style with diagonal orientation to the Home tab ribbon."); }); -'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 - - await Excel.run(async (context) => { - // Retrieve the worksheet and a table on that worksheet. - const sheet = context.workbook.worksheets.getItem("Sample"); - const expensesTable = sheet.tables.getItem("ExpensesTable"); - - // Resize the table. - expensesTable.resize("A1:D20"); - - await context.sync(); - }); 'Excel.Table#onChanged:member': - >- // Link to full sample: @@ -6548,6 +6466,21 @@ await context.sync(); console.log("A handler has been registered for table onSelectionChanged event"); }); +'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 + + await Excel.run(async (context) => { + // Retrieve the worksheet and a table on that worksheet. + const sheet = context.workbook.worksheets.getItem("Sample"); + const expensesTable = sheet.tables.getItem("ExpensesTable"); + + // Resize the table. + expensesTable.resize("A1:D20"); + + await context.sync(); + }); 'Excel.TableChangedEventArgs#details:member': - >- // Link to full sample: @@ -6763,18 +6696,14 @@ await context.sync(); }); -'Excel.Workbook#getSelectedRanges:member(1)': +'Excel.Workbook#close: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-save-and-close.yaml await Excel.run(async (context) => { - - const selectedRanges = context.workbook.getSelectedRanges(); - selectedRanges.format.fill.color = "lightblue"; - - await context.sync(); - }) + context.workbook.close(Excel.CloseBehavior.save); + }); 'Excel.Workbook#getActiveCell:member(1)': - >- // Link to full sample: @@ -6790,6 +6719,18 @@ console.log("The active cell is " + activeCell.address); }); +'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#insertWorksheetsFromBase64:member(1)': - >- // Link to full sample: @@ -6832,21 +6773,46 @@ workbook.insertWorksheetsFromBase64(externalWorkbook, options); await context.sync(); }); -'Excel.Workbook#close:member(1)': +'Excel.Workbook#onActivated: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/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) => { - context.workbook.close(Excel.CloseBehavior.save); + 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#save:member(1)': +'Excel.Workbook#pivotTables: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/38-pivottable/pivottable-get-pivottables.yaml await Excel.run(async (context) => { - context.workbook.save(Excel.SaveBehavior.save); + // 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': - >- @@ -6870,53 +6836,20 @@ 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#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; + docProperties.manager = managerValue; + docProperties.company = companyValue; - // Register the workbook activated event handler. - workbook.onActivated.add(workbookActivated); + await context.sync(); - await context.sync(); - console.log("Added event handler for workbook activated."); + console.log("Set the following document properties: title, subject, keywords, comments, category, manager, company."); }); -'Excel.Workbook#pivotTables:member': +'Excel.Workbook#save:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/38-pivottable/pivottable-get-pivottables.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/workbook-save-and-close.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}`); - }); + context.workbook.save(Excel.SaveBehavior.save); }); 'Excel.Workbook#styles:member': - >- @@ -6948,20 +6881,6 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.load("protection/protected"); - - await context.sync(); - - if (!workbook.protection.protected) { - workbook.protection.protect(); - } - }); - - >- - // 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); @@ -6981,14 +6900,6 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml - await Excel.run(async (context) => { - let workbook = context.workbook; - workbook.protection.unprotect(); - }); - - >- - // 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); @@ -7021,42 +6932,28 @@ } await context.sync(); }); -'Excel.Worksheet#showOutlineLevels: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(); - - // This collapses the entire outline. - sheet.showOutlineLevels(1, 1); - await context.sync(); - }); +'Excel.Worksheet#autoFilter:member': - >- // 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/worksheet-auto-filter.yaml - Excel.run(async (context) => { - const sheet = context.workbook.worksheets.getActiveWorksheet(); + // This function adds a percentage AutoFilter to the active worksheet - // This shows the top 3 outline levels; collapsing any additional sublevels. - sheet.showOutlineLevels(3, 3); - await context.sync(); - }); -'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 + // 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 specifiedRanges = sheet.getRanges("D3:D5, G3:G5"); - specifiedRanges.format.fill.color = "pink"; + 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: @@ -7075,6 +6972,23 @@ console.log("'" + sampleSheet.name + "' was copied to '" + copiedSheet.name + "'") }); +'Excel.Worksheet#customProperties:member': + - >- + // 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; + customWorksheetProperties.load(["key", "value"]); + await context.sync(); + + // Log each custom property to the console. + // Note that your document may have more properties than those you have set using this snippet. + customWorksheetProperties.items.forEach((property) => { + console.log(`${property.key}:${property.value}`); + }); + }); 'Excel.Worksheet#findAllOrNullObject:member(1)': - >- // Link to full sample: @@ -7149,61 +7063,44 @@ await context.sync(); }); -'Excel.Worksheet#customProperties:member': +'Excel.Worksheet#getRanges:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/custom-properties.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/range-areas.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; - customWorksheetProperties.load(["key", "value"]); - await context.sync(); - // Log each custom property to the console. - // Note that your document may have more properties than those you have set using this snippet. - customWorksheetProperties.items.forEach((property) => { - console.log(`${property.key}:${property.value}`); - }); - }); -'Excel.Worksheet#onColumnSorted:member': + 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/event-column-and-row-sort.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/30-events/events-worksheet.yaml await Excel.run(async (context) => { - console.log("Adding column 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) => { - return Excel.run((context) => { - console.log("Column 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"; - } + let sheet = context.workbook.worksheets.getItem("Sample"); + sheet.onChanged.add(onChange); + await context.sync(); - return context.sync(); - }); - }); + console.log("Added a worksheet-level data-changed event handler."); }); -'Excel.Worksheet#onRowSorted: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 await Excel.run(async (context) => { - console.log("Adding row handler"); + console.log("Adding column handler"); 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) => { + // 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("Row sorted: " + event.address); + console.log("Column sorted: " + event.address); const sheet = context.workbook.worksheets.getActiveWorksheet(); // Clear formatting for section, then highlight the sorted area. @@ -7251,18 +7148,6 @@ ); }); } -'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: @@ -7299,6 +7184,31 @@ console.log(" Source of change event: " + source + "."); }); } +'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 row handler"); + 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(); + }); + }); + }); 'Excel.Worksheet#onSingleClicked:member': - >- // Link to full sample: @@ -7334,51 +7244,41 @@ console.log(`\t${pivotTable.name}`); }); }); -'Excel.Worksheet#slicers:member': +'Excel.Worksheet#showGridlines:member': - >- // 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/gridlines.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 sheet = context.workbook.worksheets.getActiveWorksheet(); + sheet.showGridlines = true; + await context.sync(); }); -'Excel.Worksheet#autoFilter:member': +'Excel.Worksheet#showOutlineLevels:member(1)': - >- // 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. + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/42-range/outline.yaml - await Excel.run(async (context) => { - // Retrieve the active worksheet and the used range on that worksheet. + Excel.run(async (context) => { 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 - }); + // This shows the top 3 outline levels; collapsing any additional sublevels. + sheet.showOutlineLevels(3, 3); await context.sync(); }); -'Excel.Worksheet#showGridlines:member': +'Excel.Worksheet#slicers:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/54-worksheet/gridlines.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.showGridlines = true; - + 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#tabColor:member': @@ -7682,20 +7582,6 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml - await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.load("protection/protected"); - - await context.sync(); - - if (!activeSheet.protection.protected) { - activeSheet.protection.protect(); - } - }); - - >- - // 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); @@ -7715,14 +7601,6 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/50-workbook/data-protection.yaml - await Excel.run(async (context) => { - let activeSheet = context.workbook.worksheets.getActiveWorksheet(); - activeSheet.protection.unprotect(); - }); - - >- - // 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); From d6c4605f154e203eb6bf27a9755c0fedf2b5864b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 1 Feb 2023 09:55:32 -0800 Subject: [PATCH 145/336] [Word] (Body) Remove 3rd example from .search (#755) --- snippet-extractor-metadata/word.xlsx | Bin 17876 -> 17814 bytes snippet-extractor-output/snippets.yaml | 48 ------------------------- 2 files changed, 48 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 17268d688c920e9d51df092618b06d5f2e392912..b2d3fd68adb813c50cd45b400418deb1f873889b 100644 GIT binary patch delta 9745 zcmZ9yWl$Vkumy;_4eku?4nYQIaDoL5?gS0)3_}R+gS!R@?luI6;1JviPLM!w3!Crl zZq=*Tf9{Vyed<%;Tcwb|~aKP~aOFNq} zid0NQrf14V@6JKt51>8l$=6x0D1qT{Y}r8CPl@#Wnz1#IW-*C|AAPJwsI1l7xN+MM zMMkanrZr#!xMuMKt1EFluYmv={>Tq+KfRaj&y%_dxw%Vr$*PP$$UlG71zlw>l)@K-k7AL+m-5G;C#GH+=#f(%eL16NaIQEa}Qp7Q>1-3L~;Wwq2FXC zyaNKCSzT;&BjxjN3BX_PP%FyUy*Nm%ii;RI#iLbsD}D?rwsofiW`LHsu^ z5vM5ZaeqgsL*Fxm%qQxP3+%40JLNlD0AGo#*z1Z)6YvntKUUeF-Lwt&AU4rsDIq~p z+s1ozh!GH!V-OI?5fBjkoOylSJe)ioY;CB zs{n!hF$2Z5^Raqukxskny$lKO)^gw9Y=GQDH?S~g(=c{L1-G7i@Jk{;agE|N1HO(q z9HFMl4C(QF)l=*VHucg`jkDE*OsVS0DkfSS4czZW&YB&^8zCEpg^$^IxwuGP2M;U( zvo3XUNkZ6D(ZJD5(xeiOMru~6erV;Iy`zt#U`3Db;gOn!bj0WM{9-~~ z8ms6JP`)*uT)IX7+iU+U*Le#eV~GpK1>scCe^&4B;R&-1tDUJyzl`9@|#L& z+76;?)80)u1<`mquND%dE!0#_H5<88*Kv+X>Zfk#M7Ewx0?uL@6lYdtt})3t$0;-%pU0oQcr>8ngrL$ zU%Eq%*hE%Kv<#vz*J;z%*^ctC`0}w*o+fwRbhwgh4gvCu);RaO6kf3r5ME#ZMcC_W zs;P0px+oz$W)>Y{NM`gK>SAHK;Eg}vWbw@o-P+pc?v_)BI4ujH!v5MB+gHl)fW^Xo zIXArpdA`4SzCBsX(1g4^Nz?s(d`{n#dVaoIqmwT03F(3d-@AziKmA?n`Fr<#dG(Yi z9TFS@dfvUi-JiQddN~Zw3waQGdA-Z<>Iiwfzsu01>uH0`*9qJd&e3v|YXpup=kP!B z5H(HRr+gU6zjbF=T-itH!sJ}uzyYNNNKxT&+&Iu)cS{T%ibQu%pm!6bOp#3;lWz-I zqUYNDy0rPKZY!A?;GeF@FN~CTXu2SjR|h?IzhrMWQYXIX=tQ6Dy_h!9qqO0iewJr1M|Dz zCo^9h8EF^@3q!r%sab)mh}Kx4qq;feZE z`c%Zm$lp}Am+dP4Y)&ve|ESauR0pKJ>&qb#9Z%-xF7rPJuFvlw{dikeTkSm%$Cjtt zn*)JI#FS?qE%=G(UDoOlT?^&;*Vs<76}u9CCHk>|apb!2p`jU13aIHVAOP$5>@vy4 zU{1(E+>aysU{PLe^V=W+OH35OAhIi4g&L&{jM2G&p<^~~q}!of0O#h6Dk zn#F)s8YTiFABzj(8`y6$q|~FtiVoL{EQACZo*1-EMr|rv_Z7hseOfG1&gANut^#_QkX!yR+38Co3nPtjD)VkIHZrLVL9L@TNY6@j0xN7l zFv)V=FHtRT4NrgV?Zt7670Y4y5f^EVD(f(_Mp-aT>Fmp;uU0T>d9dL$0V1_WzeD~h z)}+f>i@Ym6=+#{2DeOGJwZs<{Jl@rV>L&PkpcTG24Mp)Wzdw)W;Ho`$HbqwJvdZ;Q z^*_JGMSje7j6@moK-NSlhO>|o z0UJ8KB^>jkiWJh`u7(c_th2u;1M&oZ-n3ae+&Nf3VaW3+Rp~nVvk18?eWHs<3n#EC`n5A${1n9l{XV2V_;rw0F5o))R8=sL+)7)yaE~?5$-QpY|`bYdD_?3F( zv7Bkmkc!Y=miDM0+krU&LZuXbkF%;I!4RF$E*)N_g4X#Suq=z+#5(TN`12VpwIB0{ z$ld0cmq3;7%KD7)U}w@C;O@$J>&TQO`Hhz^P>{u7 zf7y$7IsE2`hKdo3STU5H`==}y%&2b$oh=85Q1;Gl@)`crg^5VY-fqkgp?HaWI&Au9 z3>DzB{0#(Z$4No#i2-5dlE&^h;rSL%-ah;@+}fH1wo&=O!Y)CzT!yjwFp)KsSbWM4EsO!(QYT6PIK69VEE+JXFIF$mvu}>Y`jl!lPoIi`(uA=GMPh+*Xq5 zgAbD>K@$iqbzmT#OT`WykrJURlyrvVfOy(Nl?0z7$VEFRoit%vrn zwxTu3g#{FhW`ju=@ga#!#XD2v4e~V8G6r3vuiunU@Y!)0v0GY1dJR~LkCgF%8`p5l+p#Rph^Guu_%XH=!}^rBq~H_kry4ORK= zQkdeQ#5>MDCJbS(1h=y2pS7<7I|*MlBIstl$QV|)neos%vpzqR zKyAiZi*b#m!s>SbyD5oBo#Tc}X*M9pK;D_fl1$2*chiQH?l~eN*~}yO6G+!+XdWnA%nbJ&eoeB4r;Lz%nU{2T zT56Z4R{P{`);0eF1=)O72Fi;@C1gT^OB8_P$Hg+Ely~&wXt+=)_2W_$R`qsGgp7<4 zyqym}7PqttVAg2r^YO{Cz~<9ssAcZuHl;R{1g=7B9YB%rB&24gdfF35Dvc8Uwjd1N znHbf}8QlXVU?_CnO7Is-Durlz(Q`opS{IbUrIMj5C3LgUB}wt5(8jzAT3n`MBATe{ z=;2S$y0vtvKSxTb+uqZ)JczdAyR$MWe`zI`n=tK^0@tI%ayR0f!1$yW7N~|U$3=av zE7FvT34R}s%B+vNr$Mxm}6vF>5PZBY}P+sW8ojT=#m9hQW3npRuSEpM|! z;hLE13|O_HN)u7NO{@}wm z7&!iejJk4PC;@yL5lfegmq}Q;bGdf%# zL?^1r7!u3YjzoLOiYUFE$T6<*cKT7>^`!(_6|7W6WmupOC#jakC)M_7Ye?Z7eUpp- ztPO*#M7=hxxDQKP^@fnvQV~3NU-A|oyIQ|BND+Bp9R5bQJ~?xc*gxq?+?|amW(?|n zrJeObm2h}jNXK+rS#=|Sut^V&DJ%_Ab^c1t8^P6Qs(%)j7x})9E;lLDG^MbFP35an80!lx)K#kR9Z=b+sd7&loy(V-#xF$dNHvI;6WVo zz&r3O(YvSw&TZ`$BAQ4Z85%q3i9gl&Wg{L8uhjv^9jy!FlEs@Geon8^p{G?SxD1@q zYrNm2{<&UiW$3e^1ov?C&=%u=UTaCj!jd1CgL_9%>Q1L17d2Bs}z|qHh{8~%DLQ#5bmYmsA@7TM%qM|xuXoVtHvd@K% zFc@B(bA5ydvynN`Si(_DH+lysj|sH>NhGh4eo0&-&4uZ2Oi$}Qk8a2~%d{Cfvq@7^ z4oZ`OkJ8^8!lL2+=Yg?JpK#p3N2HH{YE zW;Ne?+{;B7A=VK7Hi^?~z8|>7z}<)_QT50M@#^CoSD7+aMFDnK7jZlH4cEq%NKYxcTTv7sG%#yl?a-rCPI z1_TmXqBUF>woo;+{3~nn;Mi`csby$4v^W>T5NlJ35AS($@w5{%_N}hDaIm55hIMw@ zovj+bsvCuhb|UqnG#|stfc&&;AhhW8sXuXEYYd$!LTMF2_UC8f4fsX*G8MlW#&LhJ z2rVD+B~lE?kXuMC2%G6fS7lyNQ*`XS=y-{H9a-(Ah>wG%2ext=~1(Q%{Ul3omTQ)x# z@dBo#UNaSZ0$TWdBKnIN>nU*14Xx;NFEs*=_3V|HwAa6~jK^$VqstaaV|@R{f0z61 zaE>(b#G~`2lvM2qIc#j_sK}M5=!8i}!R-lwF?tYvk0klihN2lZu}1Hiy~m1Lpbp9A zT^<3J;9?hqy){oJEZzs%5lcuu6u8z!@g=>!Fq|kVm5Ccsd!-9b|Cy&Gb9PMw2vzh# z3KPhUGXF;d%=tcuxmR7hMJNXt_LxKoPgM82IJxGw(iuHMrKp);AdrAKhcq-U+-b8t z&RHFW#p=$k2`41?=O$GX=lQw4=X8wa{MwJWlmy}6^3^`AFa-103ZP}3wY2}POlwgf z72XMTR(^Fc`IPJ>zW(U=Lwhs*nWZ`YPdXH?XV%SS)t1X>V3Kr!FK_fUvD9@AIOe0u zyEF7{$oz_etX?eEnJthkuQcFkFoZR!+YBDwwBb-hDnE$naVS=jkW>AU^;GBMo_;(R z9u4Hf4Phrgql-zF<&Wg{v4R@ItlB`Pg7?D@QH71ZW84c>tUgPBhPf#hRw=PqP;4g$ zs3idF%-tA{GJH(kt7W8ARo)Su1GRbIq>&@JJ)mgEO(^@ZXES<~(I(-tXgm>(HgpS% z@2@TxbX3Z#csw-G5;k!5;x~%cguVc$^Zg;2g^j^9_8w4DLxQx-A061rr}5X03~)H- zvradzHKdN^@b2R&i-?>04sq4iz}j_wXbsWS*IN%K({qxK$6q( z45#$4%G6r!9lN-%EJ>#dV~ZM3Ys8yITPIA7x2AbGOx<}~8g_pGJ3m|_4qh$~e@kP9 zJO_k4-JFfTA~rb#nK2*?vDv47$Os6|SO^HX|L;D~)63u4*7Lt5AY9+rZS4(l2;Iyp z@WOPKIo+NrB}P0U25Ey2NKtQ~TI|dKCud35$Q{s(4)lpTPkHZifc24a#k-ll zV9r!=976Z7qZxDwGGiD5)tp2rE<`>XIgMp9LY!^-NUzjh5Pq2gh+#OMQ)=Fs02?9Ce zxbUYB<^n@-zS`HddPBc*_|T2-?q`T;3bo5ofKVZCTKG|9v*b}Ji@~Tl7A9MCw*<0? zlRJz*ufG*_>)j`nt_%V_$kP3}^{^-X)hj3S$m4%Xu!_J)Nw}@?=r@2J3JqY?PATgUfalrQx!XE2>y&g{x(vWeTmo zul10=nY@c0n>>V`LzTR0WcXIoC+?SqiXN(TrI3Lm{f|38$EhC&-Oj+m%?)P@z3i8! z{9fjG3IR|-o(qCsDpCbDSE(7jZ{(mMZ6%p~y5!bW^OCj^G4=wOnP(qs$c z;!@m%pr39w*amRsFt+xA^v{C#$NC}H_fSY^AmhkjBIB{ZU)rWyYu?tW+0pk@3UtGO zBRneh_YBv%U^IC!h(D#gBtW$Ng!bkc0EN!XF7f@Uu z+1`&u#8g-VWX$y-*O3@aT}^yl&=VrgHRJz6_2I*Gk)UFY^ihcrUa`#KO&|yX)&Yq} z20wI1NYmcq1}I=(PoF(5?H{zN4k*CQ!ke5@K94(hV>Yc!1~gTsyHjojScpNNw-dA%PfVyG)`~!2f4$C0_}Xi=5sYWvTCZw(K-z1 zmS0)I%{fz>t6p$Y?#ZbiPay}4CiRrG&c!E9=Gd$@?A!!YDs;o%H1PT=mZ$G3$+NQF;sr$Dhs=J3%8H*9!(;w#po+PqbBw`uTESG?bXWJ& zd5885qDpd>hqmoTqJA-fak+YBs^j4g$3=>&>~-fUsz{PahF`h|>X^_qvLE;Q>`WIj zd>Rb@k8&Ocs-ab*+{UU6Qz&xQ+aYNo7jVj9<*2mUVkx^4KuJO&$LRVvW1mCs!4h|k;Q z+Ts|q-OueL5c#Og^ZqD!hz3}&2PkF#fIM%9{>Z&r6iH9N7p*tQTbMl4 z)H%cK+C=Xt|Hgz$v_x0`g`RgmQ&c3W8x1>Y%$l^a1f<;IP%gJ#vq(cm3fw(yHEW_Z zGr74Wp9^dFzM2NXT^AYw-GJm{(az}&rva%F`4LOdaCU~xsSJs_c{GJJo1D8}mrTqh zVOn%5ReqcLOl#&mK2v*@XT9s81yo#*3fo^1y{u1yjRYDl!NXR)3?R)cm0?%i^JX zz;Tr0WoV4;d}6m3Mb^5yCruvsiA+s@5QLA zS6xv9V*+@%Tk`zZ@0IWKPoN9>W1gCQ>(dunw^I~+Do0`l+4|;%iR}i$=^()^*8TCB8#0Y8=a-;k_Hil8*tR zcI^dHWsid80f7f_-JB~liT!&{9OFi<4AY2YwZQK=mPeVS+5UtQwpNhOVs-;r->JMY z_A3e6*e2^3P|<^+edtkP-*^bEnMxQQul?uo^9b(eOAcjGdu2FcO_lxFYAahq0>#jS z)oH09&C4~Jq2`|#F;C-*+=F`XzX_RwZTn(zn=}?2E4=bd^kmFaI}A(QXQhs#<7bk7 z83s9j)|Z6C8mvIvlO}~H$E(-m(!;%jC_P-g7)Pbn=d8NE4aRC^VLc{ho-36+YWv?D ztjqI@`-oX0XSn;rxg>i_Ajj9%!h_q3^0YoU&5^Wm^$4emb~*(=VTb~xM2+?QwfOcJ z#P{DLy;P90+fMlt$Sc$lL#sGr*1Y4SdsuM z#8>so4Z%&9*l61+VSfQ(0Jji*jv3`d55q)Recl)&ZVi>El; zN`aW7(6MF2jC-?H)6u-ybeiwJ;w0;%{I#x-dW@nZ?Xwm2-tb7j30&s4q}msHH1o-aLfK6 zk76Ta`Ns6mr0CYFCEf)tQZxl+mt*9i*!^8Y1gdh-%z&z|51(hf2yIaN(^cYHVSzYo zaP3pUr?(ipTyKM$_`7dKe1znKnp$g@=%qRj=M$%n(zeKn9(kBCE}NIm5E8JOzCB1Y zbo-dMF*-X-|C*6%F{Qdi=Y}L*PdYzH7>d{mqk}R|sb84CdAbcgwYo2^dACPfRhrhV z4Z}wP_LYKLtE1Uu?2kF`pQ}l(91UhqDvs^ej_(%M67C^gqgMRG>drQCn=KTZirk@<})_5l%qn6e32OdNai%Oq3)~Zz{+(u;S8U~Sot7r^o&&a z8}Yj>t^Km%AVNKSLD_*1XL!7k!i6cDz z0`GLKz7{6=UvrIMkTR#&TZtvczmHPj=Jk7d=X|ci47ovX)`XnSoV|u53e-$>2r}1v zh*vlbq(;c(*B%fUVAd_>Kvl@K7&XT~^k|{(9}WWC(d}xPE`8o&v@`JD2d7qp2{OEC zqSL~dl_*Ln##KhiYuN+#clS0u{MIw)d`!fmS*!y1L;ecI;ahGEIXMNsuNgVMbH~`s z(d#tq9}Ud;q9-D^1|7?%#?U9;vhrxt%MoJA+W6c3p=$vz z!mZ;jH%RO*#knEF`vQ4bKYk1lZABcq6JIgUqExppkXzC#{spCq3RO%zR3Ucfkz+Ue z&v0+k2O)9;D6WKx(U^Ba>(qyshJE9t3B}DKc)M$y%~S@&?vwEDmNT+w^e%|2kH3$4 zfQE0L5kQk1mZ;n<=#5W6Essl>+LQ@KdG)6u|G;Z@lotI?|Ge-;eWd+e>-Hzn&bwC1 zc$YOrm(`Jr2h0$2$?ofth_qimLx?0<+wqQSh3uL-s%E;T2?r_P?&9Eafy1>0tG8+*JSf=;Ys= z`TvOy>|Ra*X%z?q(v!eG%Mnoh-+A=^2O=OC!65QL>i?Qzc60=UZ5jlGe`hTJOP)Dl zUGg$W27<5#L1q{Om;=!r_7*Ho^jzj#nbL_l!- hhXnjDRs;k-7^i|1ViU|!LGmACg#rs&lI(wg{|B)=E=K?W delta 9831 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 - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml - - await Word.run(async (context) => { - const paragraphs = context.document.body.paragraphs; - paragraphs.load("text"); - await context.sync(); - - 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); - } - }); - } - }); - - 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 search term with its results. - let correlatedResults = { - searchTerm: distinctText[i], - hits: results - }; - - allSearchResults.push(correlatedResults); - } - - await context.sync(); - - // Display counts. - allSearchResults.forEach((result) => { - let length = result.hits.items.length; - - console.log("Search term: " + result.searchTerm + " => Count: " + length); - }); - }); 'Word.Body#fields:member': - >- // Link to full sample: From 202380828434637990df69b39950698a004c8f4c Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Wed, 1 Feb 2023 12:23:09 -0800 Subject: [PATCH 146/336] Removing duplicate mappings for PPT (#757) --- snippet-extractor-metadata/powerpoint.xlsx | Bin 13273 -> 13210 bytes snippet-extractor-output/snippets.yaml | 44 --------------------- 2 files changed, 44 deletions(-) diff --git a/snippet-extractor-metadata/powerpoint.xlsx b/snippet-extractor-metadata/powerpoint.xlsx index 3a5d43f3a2c2f7b303e9d53059fc6fcd2d5ddfdf..82bf34ad03ecc8d0da955d1c6a125d31664d5102 100644 GIT binary patch delta 4339 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 R3Rr>21~D*RrqF*C{sT@I7Q6re delta 4417 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 a-q<6!3h)#QlT-%cux^t4BxB-#2mA*F5iO$t diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index b438f7488..095fa4da5 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13306,28 +13306,6 @@ slide.delete(); }); }); - - >- - // 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 slides = context.presentation.slides; - slides.load("tags/key, tags/value"); - - await context.sync(); - - 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]; - if (currentTag.key === "CUSTOMER_TYPE" && currentTag.value === "Premium") { - currentSlide.delete(); - } - } - } - - await context.sync(); - }); 'PowerPoint.Slide#setSelectedShapes:member(1)': - >- // Link to full sample: @@ -13380,28 +13358,6 @@ await context.sync(); }); 'PowerPoint.SlideCollection#getItemAt:member(1)': - - >- - // 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)); - }); - >- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/powerpoint/slide-management/get-set-slides.yaml From 7e742fc5ca76997c3cbe0bb4fcc9204f08067b47 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Mon, 6 Feb 2023 09:53:51 -0800 Subject: [PATCH 147/336] [Word] (Footer) Remap sample (#759) --- snippet-extractor-metadata/word.xlsx | Bin 17814 -> 17821 bytes snippet-extractor-output/snippets.yaml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index b2d3fd68adb813c50cd45b400418deb1f873889b..5a1146b45add050b346339a460b040f243dbad06 100644 GIT binary patch delta 2732 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 m00000000000000slkG%40lJecMLhv{lWIjK2A4qq00011B@>7M delta 2723 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 d001zP^h7=Zvy(GLJppl(aYZHukU;- // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-header-and-footer.yaml From 6a11e80f9105b9b2558a32c0c3ac49037e9e59f8 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Tue, 21 Feb 2023 15:07:01 -0800 Subject: [PATCH 148/336] [Word] (preview) Update Style to BuiltInStyleName (#761) --- playlists-prod/word.yaml | 11 ++- playlists/word.yaml | 9 +++ .../insert-formatted-text.yaml | 72 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 17821 -> 17878 bytes snippet-extractor-output/snippets.yaml | 16 ++++ view-prod/word.json | 3 +- view/word.json | 3 +- 7 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 samples/word/99-preview-apis/insert-formatted-text.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 1b9e60307..e60c95857 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -312,4 +312,13 @@ 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-insert-formatted-text + name: Insert formatted text + fileName: insert-formatted-text.yaml + description: Formats text with pre-built styles. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-formatted-text.yaml + group: Preview APIs + api_set: + WordApi: '1.5' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index 86fe45628..54844d945 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -313,3 +313,12 @@ group: Preview APIs api_set: WordApi: '1.1' +- id: word-insert-formatted-text + name: Insert formatted text + fileName: insert-formatted-text.yaml + description: Formats text with pre-built styles. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-formatted-text.yaml + group: Preview APIs + api_set: + WordApi: '1.5' diff --git a/samples/word/99-preview-apis/insert-formatted-text.yaml b/samples/word/99-preview-apis/insert-formatted-text.yaml new file mode 100644 index 000000000..483b19fdd --- /dev/null +++ b/samples/word/99-preview-apis/insert-formatted-text.yaml @@ -0,0 +1,72 @@ +id: word-insert-formatted-text +name: Insert formatted text +description: Formats text with pre-built styles. +author: OfficeDev +host: WORD +api_set: + WordApi: '1.5' +script: + content: |- + $("#add-preset").click(() => tryCatch(addPreStyledFormattedText)); + async function addPreStyledFormattedText() { + await Word.run(async (context) => { + const 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.BuiltInStyleName.intenseReference; + + 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 apply built-in styles. +
+ +
+

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 5a1146b45add050b346339a460b040f243dbad06..528b97b57aacfacdf11e79eb1ae17d516ea004a5 100644 GIT binary patch delta 9027 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 HN8x_}3q&A@ delta 8941 zcmZ9SWlS7E*S2xD#hpbK*8;_1Deh9BxVsiDzBr4^7I!O9+?}EYin~j3io2J$&yz2C z-+brC{Fu4t%1O>-<|Owl#K7moz}IS_BGZ8NF)LwusFV-`mn?3=z`Vw{pcmD;Hpa4I zIspz%0d0pxaUD*XKzR#@il(&`*hpdFJ>XVwi~R_Te7GeXQvigqYHC~S2LRYFgy!i6GyLWg3H%IXKi#gAJWk4W&O@6 z-ETit8D0q~izr$X{GJrM|J_viQ^}4wr7+PRzcAgv6+NkW*FITROl6gBRRSw ziq<<%8dG)6kgv_~I(eN&X|Yh{I#h@8BdA{S`wiVe<{oJ~hbc z##rjsokZMY&*;LiIeh{r7F?NKWoPh5g!!}=INbmF1ZCfuX@~YjKwtl&JJSR)+@Kxt z!7%U2xDI*TirM(x5)-*Mwxb#!nCAhr zOw%zU?}q|v{I}XTft9%w;9E+oP0~%mo^(iSH{in^b_0^wV~FRI{!w6y{zx$J(v@6N*s=2hVU-5HH|f0XZY-}O2B<$qGTUQ0tjyB$ z02zZX1K|(!+w!wxvfkztFB79&sWslhz5FKn<`5&=iU{t~eZVX-oj8xx} zMqNTUIF)Fa6BZD%>9WF&H?+xg3aNcj#fKrG(N)>9=$D9T9S4e193bfI2sWq$t2}Rh zaYZ-{)2dUXJxK4ETwgrMGCJ3m$?erGKhCZP79!afVCvPlKb;=CaTg2-8cIiv6-)}NTsblEAJ5tv_qjOmBk|7%pgVO z^Tnq3{@Mj+VoI$*ztBlM$R$tQro?D*G55-!8Dx2!j?BqD8#7`zSGt_zA87r_Q#}oi z6b~Wf-8B$~)Lh+u65SWor9&i#gi+;|`r)Hqk+twKe4> z+rXCA4uuAZ8+#r3lg|~=q|ENZHnX6ZA->McM~WMxzKL#qf}u|d>cO9b^hiOc$VPUr zbHW=tI$>iGi(s4t?B?ZX!FB(Lne`9aW)bWqVVDr6yx;JzZtXJ@cJsmyWS?8L$zL(; zO~NMUQx`wHd7c5OJbOtezP=vGJm6~KkyYXCF}Ir;3)n2TvY4Z0V>z_^&rel}okJ`5Of`rTG!8K;4eo}3&BWn< z5B(v!YJW(VgeJj$mJE`aj71|5aIGb-Q@bdMMiMwZLj$xX=1!|lu6@oJhHvC=I_%>>W28s z%k?UaMCp&fj?RDw7vX^CzpFp~-oIR4KPN~81_X+{>^$7<&E6xt9)#rtJ_^0Q-KTl9 z1wK98r>W8WXql^dcbh*;&04DJ_p33B=ZTY`Vd5d#ZYcN8m2P2q53U29ZD}0~B9h`O zPJzREYfF98B|3N@5Y#((=2ql~}s3PpT{rKSIud(Vmb& ze6EbPMd?3?i0LQx`MY(Vo+R*?lmrP{kx1!?Z&$UaPRAG~ZCaBR%k}}>CAtXEnB564 zkM?S0(gF9o+FwIptl)^V$U!XxNyeYt(<=c?;05l~T>+{BQy&n_1`hbNcfQ$l;<*`i zM9~Fe`~rrDCFqFjP!Jj*b}MczS(jaHj4`~-l&kV815!Tr zW)TUFCh>5T_?!XP=5`TgR7$EVJ^N#sbF_N0IwPV>(+}sp1+*`#H3@F`a(t?+#+eJ9 z@xK$y%%dGT&)d~C;)p|lYM$@j!P>%|#@Xpi@L37_up}Q%ODoOo29!aYr@$JwgV04R zdIV4$QM9VKfp!(Ft`Pdd?fJ^eIA%_tLp72?hfy3NAVT^p)}On7uR)hwn;au5Ogl2) zU-$S^%Q$pH-lDevmf+Q7ntb}9mO*N-XGtEsoRr8yCyC*mFA4Fe$E&*b?O{M{x?-@_ zkwD}}_{ApAwN78ppfnh45v59eTCC|;W+?&_E7kf2ZBo%a`Lnwl%OObN@^=((u8gX{Ue+8*`c@BeG-?p3b_D^Gwr!$bEC({l0Cn zu)VjnfIOo~amrO_+50f^IW2}#Nws|4|4@AI?4>u2B|kPz=9~b~{`e07s!MYm7PAkw zUe1n7%cW{;wpkZd%#+e6Qzra zZ7)9&zC*(p+1d((iANn*dxrDPt;<9iK!O z#Cv;sgOMBVytRzw$$5-n5;7j2kX?}Z$%fD7MA6U|08~=A1Y;r&ii~Spg7An!Y#SdT z()HRG-{{p_K^{nm%jh*Ea$-CNOBYCpLa@Iqg*&X?vjl^M@C8h0@{WBIX7k3Bw*!u5 z{RBw6r?Y#NYGlagZ&o3;>F&F_X5 zartx?6+R>7u|dj~7x?VIghe_`!9cHh8K#ft`3|vw23pdwzJHop#xxvA>l@<4>Ptme zNUmlvubW)u_%7~6lAEPpXkc(^g+LvRamm%8S^LZ7djd5;n{E$clcCd*>ox?TQ)4bz zRTs$SP)O_~UqQsFV3Lj9>MqTpbFr``2kz-K)2cE&^aG(_A_Oi68dY&ptQh;1MqQo9YO;Q)rs?WZRWG)jO`9-}PB0kQtb%@Fk0X=2J3PJoynzEP)iJk{8n1o&fD(i~13aN0;xo8SlfFSghtj%MS5v zo|g*~PYPZxqL~g}6cbJis?WKg#%4Gopn~2+{R|C;)U2k8UmePQ-SV8Q=7hHz-I)d_ z|D_gNYCyM^^IMAw$zG3jkj5pxFh$mNIx6UOUX~!2jrab1SYmN#gDlUEYYet3@eVbS zCNLhl>`r#nK{$lNj}%!N_TnATR#zkR45l_66s*|#FQW`Q-%y$)F)`aa#fv!Pwm_?_ z1@iW8cid6LPj32xiJ2OS{EFz7v!uO z;~Ems0v%)9O2YK0UxzNVnc>%{nQy){K~yq>I@QqE=rF2- z^J`IXMSxrdg>IfsCsCyYF0qDNOIQ^7C0F5* zvxUm1WPwNepWXOt<5T+yeUNcy!mdnsAp?=FH|l9GWKrAK`BZe5j zH8=jqK_D4Z0aljR0Bw`AG=@)*KTq^&5>+8rCHpd_NZv%1%vdK5sqv9(To0%`RlHhQ zTHyXZveY0?)sV~>GLfrDW}ri`B1U(J;jJ|*f@H*@w%9oDPF3$F+g}T%jTjuV;X8mr zI}&6J6`F|xT1p)#yobiKZD}+SP(^ZrsjMZ&t}1a$ zhTQ1hDt(XIn&(F$Vuc&5-VSe3K_?YR*mP_Xt6bgU|4J{uJQ%Jk%JDO5aFhN&Wot^n zz!vQZqmK2!g!;l+8HV8AYw1|;6Vg2J(xk@8w|S5{v}HQW!XG0=D0t<0JvET}?0uS+lFPr7k^{<8W;xS%S0?N| z2ctE&>L+X6H-ijjN0nuP z-bvO23FoQXaX#;;@dFOS9%ui()NH(0cr_56HF-|vZ|InQvyuvB%>^pj@1hDcGPug7UsIwFRi|XG2Kezb@Z8T zQbAC#tTsskiz76}fjpu!C}qsjH_Ra5TpQK@&iM`iuT_Ic+zf5>j;JeujkS6OMO4}1u{7fOL<*~ z#JMR4m@iKnX@7XL6Xi^dGv)oE`Y99090d_^QBFf+8Sr}SUD$$tP+eb1FBoGI# z#K&Sn`wrpTN+b3=@=mm7@$v#>6a{>Zi>d~O<`lDvbOJu06?;<=DzSp#O`ZVRDRU(i z3YIf$dG@}4>WjM#B#Wv zS!hN~NvyuBsH6%E;=mdx<;nXi{rt}e&JwUu;}zKVi|+F<_4K+8mAX?Te8)x#^^f^v z2uRBt&^ z+^G(XK!3}=P?J&@08CMqYuMI`IC$&P;yNa!sypGsbRMx3iD7Z{Mzw1!;eME9$>D(C ztiFbUp#~97YlN0rTa3BfAYHU;3eT`(&0v69RV7D#835H%>d9q?Jhm7z`+MONEdHu_ zSD?V@YYWzH)zu#>K*t_s+jdA8g!GqY0E1^1ibnHC;kbaLV~(Y4nfG72VpKJ|0?dC9 z3>$M9_bod&s>jf7Beh*;YYeIAv=Vr+2)b3s5=X{2`l7F=C%vy8<35r%+?&*?R9+NI zR^!<5msVdE*-QO1Ptf52@!27cvv%#LWv!t(z^X zZsrB|6SsjwZ}dX02E7hh`+DJqcvoPJ6T_Tfbj-VVEINw-H%VOYd=9NFBrx9bb{gwI*WVD zaFJl?Ehqt$j-VwdqfVrF*vqIP35|7i^mi^%lNZX&^?Wr?K{;VgM?S`SancHi#6XH- zxxNXh^jozmO7g~p3lr}nnya0F)b-zo>w6lBK(QaMPj`E7a1GADVN49YTG~YxR5-XT zDj1lZ3gSW`fY(iO2*LBP$Bmt7Gat6}k7;(J8INP9XRfbY74N)8yR98gT}@d1CHdFwSI#v1QkQ90k`*v> ztuxHp`0{^aXdp1OTS1&G4Y2VWDq0#t)c+|wEHWm>*dKJh#e_JW7@A)pr#VLDN#+!z zOe-|#OtHFCt~qZ^trgS;N?~_AjDJjPhbT5>DU}X}d}^LepOXOIT*q+sUMISj*P6bH z;CUmmTq85#CPs6beC)3P6}A7OvznAK(lFZ53O#GnxP@0p%5c-LT2Ig^#4{*WF8^wO zFk`hE;8ScA4B=1TF#vDM1U5LV}BKICPHsw6jA|hX&^NRIlT+~6omsf9t zHMJUP@c!K7Y&u9hOwO&M6*;)A>Gj?!8BZR!Rfnij84tQSleM{HQBpTDa_+8y*E~wBRm#f3M z$v%3kkHg_z4&wd1u7C^AY|vH*|>q) z*zop}bT*`JcqIjUjc-WgRzxZW<&0K$67W?tH)1h3jD>DvB2Bbr4n=0wGVA`&B?G7^ zM4d*V!h1u9Vbz4wYht(jv}Y|SkK!9`092jGlb@_5w>-T#lWm7mIiKEYT;G!HjNi}9 z$$WEBF}-OtloK>+QZV9?@jQj{PMM)jD-b9Vkhz7PhQwc zx@HdMy04dcWk&A)1-t_WwdoG!7A?{Dj27XQNU;>#yD9U*f=~YZ%I{U>8trN_Odq@Y z?MGN&2Y)f2jqUUxNm~3cPR4qszPMZENb{;nia$vS<=(uhQVDGusfB#`CW?IRr|nHRwuOUx>1D z#TnTz+Lx1~DaU8+LH;54ICx&?m%Cc;+T?}$-2@r8!lBToOdXT_gw{{|sUp0a&Ut3O z=9Af{dU0JCDKCc&Obrmx1p)%(Nx?J+ezVELRY%M&qS-vkOI+J*COX%ns9uGkx$yt;`|eLe~8m!xWxq zd*yg7%;Pn5$f*9oy{OQTZccm)h9bJB8=pDc9K46Qq610f9x#M8#z@|qxw^bL&`$_8 zK$)7Naj7aj$RvCL{Uoly)&B=>H=mKTRc{P-gX+9}nMaPHHrV8An{JWowD?g}+*INp zU4O@L9kEVWow*3dxMBYB(aH^}#Lu1qq#x`(XotlXXG~gO>I{@hLVg$;yDyh>D(!XK zT9oD%_7XBiPH{l`!q~-niXcZf7W@NS3sTfxjgi!`wQwi0)|z?0>yp2RMJv6pb&Sl}Y_7P*wW5ORq!>2p_)~z9$h8y0YM5DTjiP>&QwC`roO6&7^*g-c3~X%M)7T$yYuPpv~$&$jXD>e#-k$ zKa=WlcjZez7CGm4j7j`xqY@lEKCK1D5Ve$+wbFAwU2~HjNs)IeJelF^f7{sw2#bQv zTRjU>qHc^CuDCCs{o0?4AKccEx~Giaa2pbNf50PAUD6!DKJs&5d#{LbZ%4{2$YzHy zf?#p{ln@Gj{7swv9J2MmrCXz`aly?MGn@--geWrd4*SRhp@;jr2xNKxseZ*TUfk}r z0@VJk&({g7`FX;yfz{BwP!+Ttc9nnzo~}CqFFq;%hUV%;TJiRSxrB+sluc5CCr%LB zW#i&0Ts%fY_oD<|mzPNky`!VVpDFPsBZ@mz4oKq7xZ|U!u7DLksz}-iz#nvo*@R+^A;tXXgmOrkr$$*PKFSx^?3%l95!_?3%;4Rw{#9)J=q01&?DoYj|GEZn; z&Z_O&cMH1w*{Cgx5iU)ejfw;-T{n2oj1G zeGW!vNns~VJ8|q~TKAuyWE9R16(>sSf_(Uq{(>1?%vz>Sx&Q(IlGt=DDSInfF|u6^ z*}^8#mhB|;UJ&xn;fJlTZE2H+(Idn4wYd9jg$u}&SwHzp;?-CNpsZ!p)>YiV8Z4fc zJx1mR*{FRIhB$rRebh4lo}cJ*!#;#Y3`(sv7fOiJhstnpdB1*iJktb0Zc!W6ASY9& zZ-EK#swUcaK~;8fGADkNaOpf6{qOogT7|60GTEjhCb$P~O_Y5<{Q>thJL*P@;hXf< zpFH=Zzg9})rFl|CrG$Xw$co8E6-G#_S$y|)b~oI-*V1Rb427Z?&3$Eop(s&K_f&}nLgI^>V8iIxR;33~~R?(bLS^eCAf*SrYBkMX&Gl`a7&-dR> zbwo(J_cq+G_STf@2PJiSaY+ppSmhX^HQ=Hb3$<1$yQLr zUvlGquR_3YN78@5^bl}+GZROi`hA@URm(EuW5?SI!dWy{0w!c1CA~t03oCrncCgam zanD5&?_RFPOBu;jEASle{a@4=$8x_sK*pQgWolyz<%E;?0@Mha!xaI=8 z!}jrgFfmV#aK-;Q%YWIL{tX7W#5#00`5V7Y@?TROUQ`d||NRIt`JjnJg8>Hz17ncG zCO_a&{;$^#2S@tPApPIa#DckEk;8PP@L(V*a)d1)Oj1e$-UJpb1*G`jJ{=D3pHcsR z0s+=3B?)f?`zxgm{{^NdEllyB3uzev4$cqx|JS0yilrst31Iuu>=gegwhBBPoc%u~ g;Q#R8;NHVHWW?dyVU99l@ZPZRGK?r`lK&C>4}#9fmjD0& diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 0123ae856..27bca687c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13809,6 +13809,22 @@ await context.sync(); console.log("success"); }); +'Word.BuiltInStyleName:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-formatted-text.yaml + + await Word.run(async (context) => { + const 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.BuiltInStyleName.intenseReference; + + await context.sync(); + }); 'Word.CellPaddingLocation:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index 4730720dd..f5377bf4c 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -31,5 +31,6 @@ "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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.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-insert-formatted-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-formatted-text.yaml" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index 2ac500d0f..bcad9f6ea 100644 --- a/view/word.json +++ b/view/word.json @@ -31,5 +31,6 @@ "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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.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-insert-formatted-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-formatted-text.yaml" } \ No newline at end of file From df3ae3b6743f83f9a3dd608b82454f14c513a22f Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 24 Feb 2023 08:46:07 -0800 Subject: [PATCH 149/336] [Word] Map additional samples (#763) --- snippet-extractor-metadata/word.xlsx | Bin 17878 -> 17989 bytes snippet-extractor-output/snippets.yaml | 38 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 528b97b57aacfacdf11e79eb1ae17d516ea004a5..52a5a4c6c90745e19e3a6ccb2d024e35d97c52ae 100644 GIT binary patch delta 9894 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 Rr4)yj$ZL delta 9804 zcmY+qRaBh87Bz^|IE^+m?gZE1!QEW~!JQyMI@kw<;NC!RCj@s1?(PH&?gR@SB*5g} znSbugd8n$j_NiSDrRUThh(TP4My%0AN4=Z!SgD2^p;G`_u9@8Ufw>JYL4VbIa1&5I z>*9YSDa|ZvbfRV>RjomSkiqfwo_>qMld8s4<~fv4?$n>p+S;a?TTaSnmw1*vw9rBC zmWIu}Uh$f_B3&P!jb_mn>NQN-vpSOGAv?|NT^@fKFdIIFGaxt!n zY9cML5P$(5v}|RYEU)!f6y@ui%vJS@<(yaQUyV9>%AW5jaLeXgB@fV@zS1wJkFaLc zlkDPv&BfX4J%C%HMqL)uO23f@!L}Ir2kd_x7NktZxzbZM;wW;UBe{cwB>9oGUZxgWK`7RqpSJSvmHP7 zEP2DW%!NeceohOx;q7j_^&f>_4hR*Nm-3gCYIx^N35m5?-o>rR4)KURXCFUoAGLK{4_$7sICQ^w`Qs41 z|Ah+zq<$`!n=RslHK>ktAMP%MbE@?PaR~|i+^t2lC^BaB6vxkB(K2{!3#qr0eoMdp zt2?buT>ahg5J5O$Dg9XVQ~|H)DbCK7Kj(BYzVuI5>dc>lxtZ#Roce%Aec}NA2Xr$# zOKKXz6>ehO-|>$<_uYJYl19w^s5cZY8;}hmpc_J{0L_2QFbc{sNIafggE@*!W~JeV zG4``L6Zi;5N{jiFSO{^~J?HU{YxdTVEBXA?`R zWBhg6rUU0G%`y|4z`UdN{k#Wa+l&$}O08A6j^A0DH?O;z9U6+=WM~>2GgG9f+BSm+ zyI1%%%Js_-1pNzm^ zkT8SM*;o9C5D=83;f~lefT`zAWp`Xb0wS4#w@ohAqJLJ?FFrqe>+SGbf|*x#Ws@C7^O_i&}m0!c>x^T*Q-Zztfkt5{(GUF#6#tSRkN~vHN9{VNPSkyF0}hTuabc zgN|1$d-?0BRV$;?@wy{kXK=)9$2CI3!+GamN<^urk+-Z4F{w}e>id(D5C++s#L1_3 zp^pl9_ zy%^={>h6VoU~@~`2orEPUqRH;H%UCBN$g3b@x?u9?%Z)-W7-E%^vY3{-9%g(XBEji zlGPpEv-k&GrG2Orl+NK4L_uY;YMX1N_el2256df-a+-HX9}w$9{z~jwT%k7`@W-Hg zTeoOTrn0`dA+l_7GdpU`W5k_p-#`7g@~qQG5Bij(Ab6pEz-KG;vHLLWS0-gPe~7 znMcwssck$uj_G)Eu3V3>a)Ajde zkE7%1^5UTRjl_OeU`PAY<%Z|O?b9Ogx~;odL!`NQC3m;d<7 z%aedtJvZq-Cp(5nC|h_&7bpnW zbg2yZG&T*_4XXO%E%8`UipsMt@nE_hNo{;yug^%xExhhjb14v*rIkj+H1uxdAGh}c zj_xY$8<^LObKl~^&G1TaAATGTh_ZUmvtjpGeXE}Lhz2~EA99EcU`^HqRM32ote10|_lIO2^+^@_3vBPVI_CW8j9yA&b;4q-u zgyu2i<||%kxx$kTe+NZFd>Pp>QIc`avgnJ7gE}fZ@bR1jmO&%4E#Kck5@Yb}=Z zO~PL%#2Cq@Dcz<=65%}+W!&Ohc7$rwC%d2)sW0uRxbw=J$GN2<-Tu^wm{Fuv$8Q~3 zRbI}+uTE6Pu}!7N{u(6CW^*SCOkm*|iTt_{j&?A407Hv^q}h6e&J)$x72{i(V7kv< zFqcxaePwrv?EHPj9tfC5;}tGz;nN*V8HRjBju%wW_+ z$}`GFB?7Z_x=fF{|9XtpHpGQ=jrH2ceiJdGf7Po|M@VUqhO6!Sy7oZ{#VGpk(1 z&S^$GPs}==H@3J+UtwY9x;{Uul^xmbfMu(=yrCMRUtvI7Mt$MenmUK*YpDX zVv}Xdvmt2L(;89zeGk}oiE4q_D9zQ+&Sg&dYC znWNu8@YuX(41F>Pfmr1Yw%SaH1gaS@Wt^EF(TGx;8MIZnrFm@~WIuI9}?QFDCBPTb26a zl(cz_FlK&F0|2k<_4rAtq0K7j;vt0u$PP`L5bb@x`AD-`Xij4__Tm)c_`r9{TTIw1FaqY%7?;k9cM(Z0A z6y~_AR}bP7Pz*(sIV0ED%=fh+hT)M1AX9epa87;GD9*B;C;POEWqysrg!clhp7XRE zA>SeBZU-Qfip>t2prE_~sC>hyUUfKS!?OAk_1ouy)>z1%ur!zrw&>gYeC@KSFvq_N z9CpE^xRFBEz&(c0&mTgGN&d|z#(W!a=tSMvyWLGiaM;yiOBjd_PW<|-IAT~>8VPHO zFN<3=fO+rVsxrxhGl^3+c=<>la6Zt1=3U%6KZITp*VqZsde{r)TPRRIS7_+9*ORG7 zJhR+7XgwABMt#{D8k7;4ukD2 z+-yuVqElB=2>K8dq@IdL*MD|0gb)qeKxdFF>628OS^9+`Bh!Xq-(tqR!4Ns!Qm?TS zWw;Ws5I&5<&*>Ce&@)kL<_z^R5Ks`qusx6Uk7wxJ=B!?|vdb%%ICRMCxqFUoZUN(S zlZVt+)xV?jtP1%9!a>Ag?gYl3YQxA}m{oBspE{PN&mTgFdx|o7rn$g^2HlhF@4QO= zDl)oWkAG9VN-DKFbdrVi^$jY-EZ>2peJo{vfI*Nb-_(g)nUjBpR$4>IoMzuWN^ zGB@V7R^mXOCiyb3^MaC`f2@-*e+wpn1$;&!&|GjG5(CKX`E$>u%~3j*_USDp@`D$| zC!9jj_0QiQ(;JQZ_W1Fu72b!U7u<*LSRC^u%s+scV2rwW_S}dzE<=UE@>fQl>Rq@C z(KwaBkLC`RVWEi@`8#t&QPJ))74Nt$_Kpdd;^XG5%3PnYBq^>2lIuFb^x9_VB8ZvY zd!1b9bxoHxw95>2eCiBdIw+vJN>!B1nR+)0#z?2e5#T zPPR%d^bF8?mpL21|%VL{4g7Bk0nMO^e`BC(SKt-cI2iUH!@tdm^W*fv7G4v*2csEu=h%d9{)(@gfB13LcU(&; z3ng`$xwv31A7}wQqTO1MZYda1o+03h-MjSYn;@QuN@Jf&Q(of?t zuU%5@3~IzrM_MAi|Ir}bo-l_unZK!HYXAnOFXAz$1GOXFje%(H|3c{hf!M_XjhpoG zTLn~u0B|MSQjRx_%`ol-1i;(wRjVR=hTeG8@r?s!f2;Ji(VEBxm-<)fv#Nr!Z>w8> zki2Vt({pGLA{y%T!bCB#h%ToQ!Xy78-g}Czg~!UfW}Gb;KWez`qal`xkhFCvyf8 zE>o!VW9mO6^H&FTqy`4>&p+s@9A_#~)|18V;>R-8N|gI4w5+Wic+0h~%!aP~YEx93 zaueDB$Uxbh=~CQ%uX+1JyyNj(k#3D2P^Ary;T)CsZ^NB&VxuewWr*;oa}xy>6j#@n z-Q_Bv4^^&IL}As!jAL)yJ7hu!i$lDB zc8$(Mrq#{UP;%KfG{brKpyhJ= zMJ&ZX(^xSCj!9i&Urx~qKE+^3zu=+~D~E#+E9@7+iik7dh#6|;?C=51?X}=@sk;yx z9Ukv+3qe4?UM3X$^^*ohxxbIMhb(m2H9QmDBRXUt!Si?ZNMi8wxVWGHA$7NvavxqO955ZFMX?UHQ%Z{tZsp z)=;?0O<8#2eZsUX{m)!naE9T``!Ra0AB&e%Dk;FWTEl5c53HqmOiScPS3$p{c|gJ| zN;?1A0@JHRO@b>7(3eld{mckO(dV;+mKm$zMy@VJh7X8|#zFr4?KTLIQli%2A`Hkn ztugM|mjh$ut_P$srZr!j*5G+7{~Bi0EAWZiK$)7{n{b_QL1O+Ncfx1Sa8Ys=OnGEE zqcK2|JyJ@_uQ1qFc)FUSIE>(yt4QP9P-zV*h4H%$o23TVJPWhLw|TZ)FkzfUr|-BB zOyaH)Ac$N|aC&bF)u(%X7vv_&%SD4J zF`1}X7exfGlt~ z)L&|23%N(RK)IAx3~q5KXiu~bqFD=}P&A>ZPe!zSuE3U`b+4si@kB$kxm$nMr@cWN zLl0gH$vb&V&G@_bI9-g*_cxk99m_UejBu~i(N~8R_1Als?ApMdB?k-AY9EfQuwH1L za#7U!AH+z(BYMc!SJc;Dy*L6w!RLV5EEqqcMI!abo z{qQr7aeBDq`Q^m@kE5T^M@6Dj8=m9?I=$<_<{?E|K5vHXwAWR7jdpC>3PZqx=4wq* z5iH*VJm5@em0*-x+fkywm{U6prnHjz>>3Px2V{E#FmiRk>eIFAN^Gf(-BSgEwGlI8o^w%RV zMy#Rzk|SjKP`E#&2uhf2Wgg+%xJu%;mX_6p>x$T9->6y`JV!E8*b~D@G`5>AaNmDi zc~3AvXT+Bzc$;YLiwmPJ9sX4nT{PDHJu|rCyJ)g5eQgXxu?F<&7-;seB~=VT)rvHl zG?lb;wbmuvwz0WX5nvrWehPZKL$7Y$kA>?Y*MuwRa}{beMp#ao8$k%7ujdr`n$fxK z#oXRMthgRi@u6R>asQMhG{)cEQFWXsW^z^YGl64K>anG(BfUb?&+hN#(O4nY4Oa{{ zWfVOAKQizlZ)2oeQS zPruNdo6az%+Ch_|MB<{5*0^cNY7CSMoax#j3@M|~hYcUa(Wcq2r~3^zpVX*wt}a9k z_yBP?5;20}QX*94DoY~#nc>tZm*D62>RwdLhMs}}RZQ(X` z@TE!Z?ZyL%Nq3H@XNf7}6hNS7wQW_toa+%gou zeymCKkH@KGE!^L%(d^EgZ>vneT*Ur{JA(bXCt+NV9Qz0s2@mwfD~U}q_TI;IqhI!F zpv|2#l^+AWwqua&#AY2S5DM6S%;S{Jkc$%2&XmyI&nA*bj|EOXvrY@(H_{r4gYKnt zZ$Z3bjw#=tMPdEe3>ZKL#z?vRB^JV>^3agf;kEq{&241si!#q|#+j$qQsrGtJ*_P~YN9 zAx>=5Z(VohcK~{K2}R5OG#;d>A35}}CO)c`PUMiL2-9aHQWLM8om40K-BlIyXm;DI zYqzH$@nyyq4zwWnkoPWSyKHu~GB3%HM&uZ*wmV^=6n5`lw4f*q77txPqu;A;~yzWdyrGk|ZW zwW>rUI0!_yT&=MT+8IMwTKZBy^WFW@54^q$4)UWP>W`=Y#rsTEe{03nG&wV343(oE z1Rvr;Spj3ZYh7718Cg-Dqz(&RRlRH6=F2|W;y=ebEVYb#M-$Ob6_IjoGI!}(5*JUR zF+HTavkQpH@LFK>{eG4s5t^!s$SU6lK!knz;}g`uVJe?bzVgjsAwO<`?OF zw;LCk{ke71EOri_qo+3m;FC&hUw3hB+J|t;`o~5je#2UcLVwYnU~(S@=GVJUDR@-Qv(@UJTS3+jK;smKVL za0PT6j4z$0XJY6G2(RF!>{LKJ^fh)T=^?=F?}!%#Zvf3&`XE=s<#0~=4BOQFlI^Tb zV&yZGGrY3iy*uJrZpG%%zP_2FX6iC$hq6bOQEPWpOwExg!I^ zaeScP%v5z%+OXZqyX0s@y4?G6xc@LmkbTccdA(_T^7wm$=lB$y(9af(JJfT!k267udA#_e#;42oNEB?;cM-K`_M9AHjn=vbMnxyzzp<4$WjRiZFP2Hru=46~ zmQ_5?C=*#8C$pw#pT0Go5V6vOXHI zlzqrInNp7tn46=JFjwmlcg{icav?Ro!hXWBpQ(qk2jN%Jo0Inb*Eul+nmLMW;h*$Y zD$V1yrizQ3`0$|A7#knNYkn$!JY!9J#Go2o7e;2n5I<0!JHomK`;-lO*zK>J@~Ot3 zMAnO!*Bay}Q3u>wrw;jA7HpCocvLc-U<72kA59>iC6u@T-6_TU6F>VhBypMd?lylO28X+aBC)M0T&O(GA3vu(s zh_}&-@AZl{gSfcw5VWQjn#l9gx6m4p;Fz^Nh<`-PK4)Wqh ztUduGZN!A<<ipz$t+$ACfBBn zj<1|93-{sGcP=ST$MO_6&7|5Hf~2KwenEvGW_yl5g&qldJC*95e;IS)6rHyzT_trn z`Juy~*1L<}Dwmc}j1Ifz$_}gugRJ@v_r+P?PJaTE1g#CL9`T9kYd43R9Z-HuNbs_S5Q}VOlilVaI_ppMTm8 zq=rUt$J5DhAA`kt7`D9L>II4H#YT$s%5{WTkYjCtN_RIPtW#FhbXZ?WlUaZt0-j&) z4_-GTm%utGNvvzPZ;6O~WC1EP`T)hg*Gg|xrN=z8#H7Q~6|tK+8+a4fqh+a>0s#%5 zT%vlaF*V|?*h4ddC1&m4p-bpr27?Lj7W{7B)FbkDBcdW6Myf8u2L*T(!xfd}vqG5U zx+UvbGEVXpeb;V;Q!zBdYAhN>)1*L&eKD*9FxB!>-?(4=SBewnds)9wWxrwH^o%jNx zhN3JaC0f*vjF4|A3V9V|#WpElP>A2mSx*PBpIO)s&7kBml`q6+ufJTqIvMxP@!;2q z=s!b+dLF!4`HcsC6u%Ynh7p=ryu}__^Ci3I?`WG}G1pr`-AOvWI$&_(grooo2#kzq z!ub%lGLWS7LY-||0qS$QthC5(CIt;MR>CgGzy|RS z2`fQn6v0jy5i8W4QBEm6&kjrC*M51R;0z+=b!o(3;)j9VcOVvPr50I9y)*?`TB&qC z&}A#T)?`8wem1yZF0k$nRT5Z7-W(&}l$JCzM^pa(O)75l8ilyqi*^}FMjy)yZ8fu| zw)_NMZ*{xuIr3wGjVdr+f$JmP7g-uQL{hoy3Q7EAVuHM{sL`>;=bs5k+n-qleOTdL z56C~6y$^4JE`@acgVppXmID0vfOupCk5S@p9=eDl$5DjC+yo~#Zk&L@7_IX-Y2XVF z?!1@jp}1wBoJYEJyWmkG#Yk4P^ndUwI$RN{*-P>eUmxeVAa!D82Q?A_3T&m zPX32$y2Q5s``;QFj?Rx)KPp6zi268yP_0&fDa?cjXsPsZ6Mf!5eUTaQ%Vg4fExi&v znnMB7C)%*|Xx3ZdXGmXr?r>{_)n5&?Z3P=dJG3Ng_dA|1%Z*=s7x)) zEZRm$A=vA!l9>P|uO~t@$^DJqD}KV*V7obc?kW^0EU8ZQ5Zfht4%>>YN%I5rWBBEE zE02H=(8&+2_T?{Tg z9l+|~bzdkJwSP0mbC%38KofV?!J%Na(xjDn&Ep>!vSFaX_4Li6wABEJi#YgYs+bswO7dLV zxU{siug-Mn3|U(?;Au2@=A#rYAK-uYj!vyNEsTMc#lpQ;k(V|HLFVjgBk=|4zrqtY zF(b79M>sVpt&K=$%{FU4*L{+$+96R*C3kDGZ!SSCv_#rTYf44 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 27bca687c..d0f0fa2a3 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13798,6 +13798,26 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); +'Word.BorderType:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get border details about the first of the first table in the document. + + await Word.run(async (context) => { + const firstTable = context.document.body.tables.getFirst(); + const firstCell = firstTable.getCell(0, 0); + const borderLocation = "Left"; + const border = firstCell.getBorder(borderLocation); + 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`); + }); 'Word.BreakType:enum': - >- // Link to full sample: @@ -16304,3 +16324,21 @@ console.log(`- Type: ${border.type}`); console.log(`- Width: ${border.width} points`); }); +'Word.VerticalAlignment:enum': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml + + // Get 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}`); + }); From 8057bfe0ed4d99d8fd9753d502b99eccd4671f3e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 24 Feb 2023 14:03:01 -0800 Subject: [PATCH 150/336] [Word] (search) Improve code comments in samples (#765) * [Word] (search) Improve code comments in samples * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback and rerun yarn start --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- samples/word/25-paragraph/get-word-count.yaml | 7 +++++-- samples/word/25-paragraph/search.yaml | 9 +++++---- snippet-extractor-output/snippets.yaml | 19 +++++++++++++------ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 2e75557b9..583c7d2e0 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -12,11 +12,13 @@ script: $("#count").click(() => tryCatch(run)); async function run() { + // Count 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(); @@ -30,6 +32,7 @@ script: } }); + // Determine the list of unique terms. let makeTextDistinct = new Set(text); let distinctText = Array.from(makeTextDistinct); let allSearchResults = []; @@ -38,7 +41,7 @@ script: let results = context.document.body.search(distinctText[i], { matchCase: true, matchWholeWord: true }); results.load("text"); - // Map search term with its results. + // Map each search term with its results. let correlatedResults = { searchTerm: distinctText[i], hits: results @@ -49,7 +52,7 @@ script: await context.sync(); - // Display counts. + // Display the count for each search term. allSearchResults.forEach((result) => { let length = result.hits.items.length; diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index b235182ff..9b7cfa30d 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -13,13 +13,14 @@ script: $("#wildcard-search").click(() => tryCatch(wildcardSearch)); async function basicSearch() { + // Do a basic text search and highlight 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... + // Let's traverse the search results and highlight matches. for (let i = 0; i < results.items.length; i++) { results.items[i].font.highlightColor = "yellow"; } @@ -29,15 +30,15 @@ script: } async function wildcardSearch() { + // Do a wildcard search and highlight matches in the document. await Word.run(async (context) => { - // Check out how wildcard expression are built, also use the second parameter of the search method to include search modes - // (i.e. use wildcards). + // 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... + // 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"; diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index d0f0fa2a3..b05054ed9 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13580,13 +13580,15 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + // Do a basic text search and highlight 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... + // Let's traverse the search results and highlight matches. for (let i = 0; i < results.items.length; i++) { results.items[i].font.highlightColor = "yellow"; } @@ -13597,15 +13599,16 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml + // Do a wildcard search and highlight matches in the document. + await Word.run(async (context) => { - // Check out how wildcard expression are built, also use the second parameter of the search method to include search modes - // (i.e. use wildcards). + // 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... + // 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"; @@ -13675,11 +13678,14 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml + // Count 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(); @@ -13693,6 +13699,7 @@ } }); + // Determine the list of unique terms. let makeTextDistinct = new Set(text); let distinctText = Array.from(makeTextDistinct); let allSearchResults = []; @@ -13701,7 +13708,7 @@ let results = context.document.body.search(distinctText[i], { matchCase: true, matchWholeWord: true }); results.load("text"); - // Map search term with its results. + // Map each search term with its results. let correlatedResults = { searchTerm: distinctText[i], hits: results @@ -13712,7 +13719,7 @@ await context.sync(); - // Display counts. + // Display the count for each search term. allSearchResults.forEach((result) => { let length = result.hits.items.length; From 9fa02fbcbb4566c71d0db31ea375ddc1106bd397 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 1 Mar 2023 14:09:16 -0800 Subject: [PATCH 151/336] [Outlook] (sensitivity label) Republish sensitivity label snippets (#768) --- playlists-prod/outlook.yaml | 22 ++++ playlists/outlook.yaml | 22 ++++ .../99-preview-apis/sensitivity-label.yaml | 101 ++++++++++++++++++ .../sensitivity-labels-catalog.yaml | 84 +++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 23438 -> 23664 bytes snippet-extractor-output/snippets.yaml | 90 ++++++++++++++++ view-prod/outlook.json | 4 +- view/outlook.json | 4 +- 8 files changed, 325 insertions(+), 2 deletions(-) create mode 100644 samples/outlook/99-preview-apis/sensitivity-label.yaml create mode 100644 samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 0079656a4..a9b9b7384 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -721,5 +721,27 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml + description: >- + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-label + name: Work with sensitivity labels (Compose) + fileName: sensitivity-label.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.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 1e4be2a52..099451435 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -723,3 +723,25 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml + description: >- + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-sensitivity-labels-sensitivity-label + name: Work with sensitivity labels (Compose) + fileName: sensitivity-label.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml + group: Preview APIs + api_set: + Mailbox: preview diff --git a/samples/outlook/99-preview-apis/sensitivity-label.yaml b/samples/outlook/99-preview-apis/sensitivity-label.yaml new file mode 100644 index 000000000..165d6b36c --- /dev/null +++ b/samples/outlook/99-preview-apis/sensitivity-label.yaml @@ -0,0 +1,101 @@ +order: 4 +id: outlook-sensitivity-labels-sensitivity-label +name: Work with sensitivity labels (Compose) +description: Gets and sets the sensitivity label on a message or appointment in compose mode. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#get-sensitivity-label").click(getCurrentSensitivityLabel); + $("#set-sensitivity-label").click(setSensitivityLabel); + + function getCurrentSensitivityLabel() { + // 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); + } + }); + } + + function setSensitivityLabel() { + // This snippet sets the sensitivity label on the current mail item. + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + if (catalog.length > 0) { + var id = catalog[0].id; + Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.status); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + else { + console.log("Catalog list is empty"); + } + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + language: typescript +template: + content: |- +
+

This sample shows how to get and set the sensitivity label on a 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-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/99-preview-apis/sensitivity-labels-catalog.yaml b/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml new file mode 100644 index 000000000..ee54f1313 --- /dev/null +++ b/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml @@ -0,0 +1,84 @@ +order: 3 +id: outlook-sensitivity-labels-sensitivity-labels-catalog +name: Work with the sensitivity labels catalog +description: Determines if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#get-sensitivity-labels-enabled").click(getSensitivityLabelsCatalogIsEnabled); + $("#get-sensitivity-labels-catalog").click(getSensitivityLabelsCatalog); + + function getSensitivityLabelsCatalogIsEnabled() { + // This snippet determines if the sensitivity labels catalog is enabled on the current mailbox. + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.value); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + + function getSensitivityLabelsCatalog() { + // This snippet gets all available sensitivity labels from the catalog. + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + console.log("Sensitivity Labels Catalog:"); + console.log(JSON.stringify(catalog)); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + language: typescript +template: + content: |- +
+

This sample shows how to determine if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog.

+

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-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/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 612d7111f109fe241a4bf976bd75d5b16d5ebbe3..bc93930856717bd9c387cdacfe226a3ae605f1fd 100644 GIT binary patch delta 13411 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 delta 13135 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/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.SensitivityLabel#setAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml + + // This snippet sets the sensitivity label on the current mail item. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + if (catalog.length > 0) { + var id = catalog[0].id; + Office.context.mailbox.item.sensitivityLabel.setAsync(id, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.status); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } + else { + console.log("Catalog list is empty"); + } + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); +'Office.SensitivityLabelsCatalog#getAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + + // This snippet gets all available sensitivity labels from the catalog. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded && asyncResult.value == true) { + Office.context.sensitivityLabelsCatalog.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + const catalog = asyncResult.value; + console.log("Sensitivity Labels Catalog:"); + console.log(JSON.stringify(catalog)); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); +'Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + + // This snippet determines if the sensitivity labels catalog is enabled on + the current mailbox. + + Office.context.sensitivityLabelsCatalog.getIsEnabledAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Succeeded) { + console.log(asyncResult.value); + } else { + console.log("Action failed with error: " + asyncResult.error.message); + } + }); 'Office.SessionData#clearAsync:member(1)': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index a4d601e5a..2d4cd1048 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -75,5 +75,7 @@ "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 3f2a30fd3..6479ea4ef 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -75,5 +75,7 @@ "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml" + "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml" } \ No newline at end of file From 7724f685398abdc7fec2bdd23a6682dfc78646f8 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 2 Mar 2023 14:03:37 -0800 Subject: [PATCH 152/336] [all hosts] Scrub base64 (#770) --- playlists-prod/excel.yaml | 2 +- playlists-prod/outlook.yaml | 4 +-- playlists/excel.yaml | 2 +- playlists/outlook.yaml | 4 +-- .../26-document/get-file-in-slices-async.yaml | 8 ++--- samples/excel/44-shape/shape-images.yaml | 6 ++-- .../excel/50-workbook/create-workbook.yaml | 8 ++--- .../workbook-insert-external-worksheets.yaml | 4 +-- samples/excel/99-just-for-fun/tetrominos.yaml | 4 +-- .../20-item-body/add-inline-base64-image.yaml | 12 +++---- .../get-attachment-content.yaml | 4 +-- .../document/create-presentation.yaml | 4 +-- .../slide-management/insert-slides.yaml | 4 +-- .../15-images/insert-and-get-pictures.yaml | 2 +- .../insert-and-get-pictures.yaml | 2 +- snippet-extractor-output/snippets.yaml | 34 +++++++++---------- 16 files changed, 52 insertions(+), 52 deletions(-) diff --git a/playlists-prod/excel.yaml b/playlists-prod/excel.yaml index b479e67f3..a0932e91b 100644 --- a/playlists-prod/excel.yaml +++ b/playlists-prod/excel.yaml @@ -387,7 +387,7 @@ name: Get file using slicing fileName: get-file-in-slices-async.yaml description: >- - Uses slicing to get the byte array and base64-encoded string that represent + Uses slicing to get the byte array and Base64-encoded string that represent the current document. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/excel/26-document/get-file-in-slices-async.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index a9b9b7384..c937d84c8 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -40,10 +40,10 @@ api_set: Mailbox: '1.1' - id: outlook-item-body-add-inline-base64-image - name: Add inline base64 image to message or appointment body (Compose) + name: Add inline Base64 image to message or appointment body (Compose) fileName: add-inline-base64-image.yaml description: >- - Add an inline base64 image to the body of a message or appointment being + Add an inline Base64 image to the body of a message or appointment being composed. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/add-inline-base64-image.yaml diff --git a/playlists/excel.yaml b/playlists/excel.yaml index df0132102..1407b7977 100644 --- a/playlists/excel.yaml +++ b/playlists/excel.yaml @@ -387,7 +387,7 @@ name: Get file using slicing fileName: get-file-in-slices-async.yaml description: >- - Uses slicing to get the byte array and base64-encoded string that represent + Uses slicing to get the byte array and Base64-encoded string that represent the current document. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/excel/26-document/get-file-in-slices-async.yaml diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 099451435..50b609723 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -40,10 +40,10 @@ api_set: Mailbox: '1.1' - id: outlook-item-body-add-inline-base64-image - name: Add inline base64 image to message or appointment body (Compose) + name: Add inline Base64 image to message or appointment body (Compose) fileName: add-inline-base64-image.yaml description: >- - Add an inline base64 image to the body of a message or appointment being + Add an inline Base64 image to the body of a message or appointment being composed. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/add-inline-base64-image.yaml 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 28c0c4e7f..514a925c5 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -1,7 +1,7 @@ order: 1 id: excel-document-get-file-in-slices-async name: Get file using slicing -description: Uses slicing to get the byte array and base64-encoded string that represent the current document. +description: Uses slicing to get the byte array and Base64-encoded string that represent the current document. host: EXCEL api_set: ExcelApi: '1.4' @@ -37,7 +37,7 @@ script: let base64string = base64js.fromByteArray(byteArray); $('#file-contents').val(base64string).show(); - 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."); + 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."); } } @@ -147,7 +147,7 @@ script: } declare namespace base64js { - /** Takes a byte array and returns a base64 string + /** Takes a byte array and returns a Base64 string * Imported from https://www.npmjs.com/package/base64-js package. */ function fromByteArray(array: number[]): string; } @@ -155,7 +155,7 @@ script: template: 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.

+

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.

diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index b70079c40..e28300275 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -20,9 +20,9 @@ script: reader.onload = (event) => { Excel.run((context) => { const startIndex = reader.result.toString().indexOf("base64,"); - const mybase64 = reader.result.toString().substr(startIndex + 7); + const myBase64 = reader.result.toString().substr(startIndex + 7); const sheet = context.workbook.worksheets.getItem("Shapes"); - const image = sheet.shapes.addImage(mybase64); + const image = sheet.shapes.addImage(myBase64); image.name = "Image"; return context.sync(); }); @@ -62,7 +62,7 @@ script: const imageString = result.value; // Your add-in would save this string as a .png file. - console.log("The image's base64-encoded string: " + imageString); + console.log("The image's Base64-encoded string: " + imageString); }); } diff --git a/samples/excel/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index 0de32fc67..01840918a 100644 --- a/samples/excel/50-workbook/create-workbook.yaml +++ b/samples/excel/50-workbook/create-workbook.yaml @@ -23,16 +23,16 @@ script: reader.onload = ((event) => { Excel.run(context => { - // Remove the metadata before the base64-encoded string. + // Remove the metadata before the Base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); - const mybase64 = reader.result.toString().substr(startIndex + 7); + const myBase64 = reader.result.toString().substr(startIndex + 7); - Excel.createWorkbook(mybase64); + Excel.createWorkbook(myBase64); return context.sync(); }); }); - // Read in the file as a data URL so we can parse the base64-encoded string. + // Read in the file as a data URL so we can parse the Base64-encoded string. reader.readAsDataURL(myFile.files[0]); } diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 040035f5d..4f502f69c 100644 --- a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml +++ b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml @@ -18,12 +18,12 @@ script: const reader = new FileReader(); reader.onload = (event) => { - // Remove the metadata before the base64-encoded string. + // Remove the metadata before the Base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); externalWorkbook = reader.result.toString().substr(startIndex + 7); }; - // Read the file as a data URL so that we can parse the base64-encoded string. + // Read the file as a data URL so that we can parse the Base64-encoded string. reader.readAsDataURL(myFile.files[0]); } diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 15d2f69a1..3a0850856 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -24,8 +24,8 @@ script: reader.onload = (event) => { const startIndex = reader.result.toString().indexOf("base64,"); - const mybase64 = reader.result.toString().substr(startIndex + 7); - backgroundPicture = mybase64; + const myBase64 = reader.result.toString().substr(startIndex + 7); + backgroundPicture = myBase64; }; // Read in the image file as a data URL. 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 c6c379afc..5d1b47f05 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -1,7 +1,7 @@ order: 3 id: outlook-item-body-add-inline-base64-image -name: Add inline base64 image to message or appointment body (Compose) -description: Add an inline base64 image to the body of a message or appointment being composed. +name: Add inline Base64 image to message or appointment body (Compose) +description: Add an inline Base64 image to the body of a message or appointment being composed. host: OUTLOOK api_set: Mailbox: '1.8' @@ -17,7 +17,7 @@ script: // 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 image to the beginning of the body. + // Insert the Base64 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) { @@ -26,7 +26,7 @@ script: 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 image added to the body."); } else { console.log(setResult.error.message); } @@ -44,14 +44,14 @@ script: template: content: |-
-

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

+

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

Required mode: Compose

Try it out

language: html diff --git a/samples/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index f1b42a8ca..58912cd3b 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -51,11 +51,11 @@ script: } function handleAttachmentsCallback(result) { - // Identifies whether the attachment is a base64-encoded string, .eml file, .icalendar file, or a URL. + // Identifies whether the attachment is a Base64-encoded string, .eml file, .icalendar file, or a URL. switch (result.value.format) { case Office.MailboxEnums.AttachmentContentFormat.Base64: // Handle file attachment. - console.log("Attachment is a base64-encoded string."); + console.log("Attachment is a Base64-encoded string."); break; case Office.MailboxEnums.AttachmentContentFormat.Eml: // Handle email item attachment. diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index 6c9876e4e..b11beeb0a 100644 --- a/samples/powerpoint/document/create-presentation.yaml +++ b/samples/powerpoint/document/create-presentation.yaml @@ -19,14 +19,14 @@ script: const reader = new FileReader(); reader.onload = (event) => { - // Remove the metadata before the base64-encoded string. + // Remove the metadata before the Base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); const copyBase64 = reader.result.toString().substr(startIndex + 7); PowerPoint.createPresentation(copyBase64); }; - // Read in the file as a data URL so we can parse the base64-encoded string. + // Read in the file as a data URL so we can parse the Base64-encoded string. reader.readAsDataURL(myFile.files[0]); } diff --git a/samples/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 6c25e95b0..73b182b99 100644 --- a/samples/powerpoint/slide-management/insert-slides.yaml +++ b/samples/powerpoint/slide-management/insert-slides.yaml @@ -17,14 +17,14 @@ script: const reader = new FileReader(); reader.onload = async (event) => { - // Remove the metadata before the base64-encoded string. + // Remove the metadata before the Base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); const copyBase64 = reader.result.toString().substr(startIndex + 7); chosenFileBase64 = copyBase64; }; - // Read in the file and store a base64-encoded copy as the reader.result + // Read in the file and store a Base64-encoded copy as the reader.result // property. This also triggers the onload event. const myFile = document.getElementById("file") as HTMLInputElement; reader.readAsDataURL(myFile.files[0]); diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 8086a869e..2ad19dbfa 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -32,7 +32,7 @@ script: await context.sync(); console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as base64. + // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); 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 e6d8816cf..680108c08 100644 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -32,7 +32,7 @@ script: await context.sync(); console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); console.log(`Image format: ${firstPicture.imageFormat}`); - // Get the image encoded as base64. + // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); await context.sync(); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 18e21b9e1..6062996ec 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -4064,7 +4064,7 @@ const imageString = result.value; // Your add-in would save this string as a .png file. - console.log("The image's base64-encoded string: " + imageString); + console.log("The image's Base64-encoded string: " + imageString); }); 'Excel.PivotField#clearAllFilters:member(1)': - >- @@ -5836,7 +5836,7 @@ const imageString = result.value; // Your add-in would save this string as a .png file. - console.log("The image's base64-encoded string: " + imageString); + console.log("The image's Base64-encoded string: " + imageString); }); 'Excel.Shape#group:member': - >- @@ -6009,9 +6009,9 @@ reader.onload = (event) => { Excel.run((context) => { const startIndex = reader.result.toString().indexOf("base64,"); - const mybase64 = reader.result.toString().substr(startIndex + 7); + const myBase64 = reader.result.toString().substr(startIndex + 7); const sheet = context.workbook.worksheets.getItem("Shapes"); - const image = sheet.shapes.addImage(mybase64); + const image = sheet.shapes.addImage(myBase64); image.name = "Image"; return context.sync(); }); @@ -6744,13 +6744,13 @@ reader.onload = (event) => { - // Remove the metadata before the base64-encoded string. + // Remove the metadata before the Base64-encoded string. const startIndex = reader.result.toString().indexOf("base64,"); externalWorkbook = reader.result.toString().substr(startIndex + 7); }; - // Read the file as a data URL so that we can parse the base64-encoded + // Read the file as a data URL so that we can parse the Base64-encoded string. reader.readAsDataURL(myFile.files[0]); @@ -9262,7 +9262,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 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) { @@ -9271,7 +9271,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 image added to the body."); } else { console.log(setResult.error.message); } @@ -9377,7 +9377,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 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) { @@ -9386,7 +9386,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 image added to the body."); } else { console.log(setResult.error.message); } @@ -10231,11 +10231,11 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/40-attachments/get-attachment-content.yaml function handleAttachmentsCallback(result) { - // Identifies whether the attachment is a base64-encoded string, .eml file, .icalendar file, or a URL. + // Identifies whether the attachment is a Base64-encoded string, .eml file, .icalendar file, or a URL. switch (result.value.format) { case Office.MailboxEnums.AttachmentContentFormat.Base64: // Handle file attachment. - console.log("Attachment is a base64-encoded string."); + console.log("Attachment is a Base64-encoded string."); break; case Office.MailboxEnums.AttachmentContentFormat.Eml: // Handle email item attachment. @@ -13757,7 +13757,7 @@ await context.sync(); console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as base64. + // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); await context.sync(); @@ -14827,7 +14827,7 @@ await context.sync(); console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as base64. + // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); await context.sync(); @@ -14861,7 +14861,7 @@ await context.sync(); console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as base64. + // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); await context.sync(); @@ -14880,7 +14880,7 @@ await context.sync(); console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as base64. + // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); await context.sync(); @@ -14899,7 +14899,7 @@ await context.sync(); console.log(`Image dimensions: ${firstPicture.width} x ${firstPicture.height}`); - // Get the image encoded as base64. + // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); await context.sync(); From f52efcbfba4499a4bd9f0acd73eb7d8777235091 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 3 Mar 2023 10:03:26 -0800 Subject: [PATCH 153/336] [Word] Add snippet showing how to insert a document (#772) * [Word] Add snippet showing how to insert a document * Apply suggestions from code review Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> * Updates based on feedback --------- Co-authored-by: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> --- playlists-prod/word.yaml | 9 ++ playlists/word.yaml | 9 ++ .../50-document/insert-external-document.yaml | 102 ++++++++++++++++++ .../50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.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 +- snippet-extractor-metadata/word.xlsx | Bin 17989 -> 18054 bytes snippet-extractor-output/snippets.yaml | 46 ++++++++ view-prod/word.json | 1 + view/word.json | 1 + 13 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 samples/word/50-document/insert-external-document.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index e60c95857..c0b8b77f3 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -211,6 +211,15 @@ group: Document api_set: WordApi: '1.1' +- 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. + 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' - 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 54844d945..b226b1039 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -211,6 +211,15 @@ group: Document api_set: WordApi: '1.1' +- 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. + 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' - 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 new file mode 100644 index 000000000..f0bf7b2cc --- /dev/null +++ b/samples/word/50-document/insert-external-document.yaml @@ -0,0 +1,102 @@ +order: 2 +id: word-document-insert-external-document +name: Insert an external document +description: Inserts the text of an external document into the current document. +host: WORD +api_set: + WordApi: '1.3' +script: + content: | + $("#file").change(getBase64); + $("#insert-document").click(() => tryCatch(insertDocument)); + + let externalDocument; + + async function insertDocument() { + // Update 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 = context.application.createDocument(externalDocument); + await context.sync(); + + 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(); + }); + } + + 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 shows how to insert the body text from an external document into the current document.

+
+ +
+

Try it out

+

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

+
+ +
+
+

Insert the body text 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-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index c3ae77184..a4483d8eb 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -1,4 +1,4 @@ -order: 2 +order: 3 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 72720f14c..ebd3cbee2 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,4 +1,4 @@ -order: 3 +order: 4 id: word-document-manage-comments name: 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.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 175d90f7b..3b6e05c44 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: 7 +order: 8 id: word-document-manage-custom-xml-part name: Manage a CustomXmlPart 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 4989589c4..894a1f65f 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,4 +1,4 @@ -order: 5 +order: 6 id: word-document-manage-fields name: Get fields description: This sample shows how to get existing fields. diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index cb1a12502..4ea56503d 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -1,4 +1,4 @@ -order: 4 +order: 5 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 e81d34180..9b67623ef 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 7 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/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 52a5a4c6c90745e19e3a6ccb2d024e35d97c52ae..94d1dcbf1dd5be7ed1eab8f48ef9dafefc5ae210 100644 GIT binary patch delta 10076 zcmY+qWl$Wz(l*Kh3kxBzxVyW%FYfLh+@0Wy2Mw}8g9Hc!cMB3AxLfexE*sn-d^x9X z)p>9K=$fjh=jo}bnXc}x9!LblBmwGlQGrRhZO3&mBUCb|tNUjz@LvhXSHOelfS*$+N63S=|{Bql1wR{XuoQ&L*oQ<-O1KD}2D{qwzJNU-a4^yiA_Jjh5c z*3{DGf+an>OaS}Qx3ytt*om)_M}Ih8;jo9)NBHT{wmsA7iEeKJF{~m^v&NTPL>;!@ zX)_UB6##_hH|x^RdFYaUE62Atf_c}B{VXJUQXi3x{s=031jU%v%8e58xT=^R(Z+5A z=cKwvQzx_cw|FEhs~g`yd|_ zH$~p)#p{m9*W3W5L=|T3A8=2>mo><10dFN@c157^XHiF6ap{+mBcqa55AK%8ue>Ax z#~Wj`LjMBUEA`(@IckeVn|BIF##J@Yx>=tJDg9oOuJNdSqbNk7QE{lfrfXhP5d!B8 z^V<|&(UAvvBZSKD?ON}KW|2D4Y;1!kRv;VUO&`K6?_SVu#@E!NWggs{8a7|&w@H|O zH;_ZY5lxK-UFOoVJb_i(_-R82mP&-)B;)XTCyAD|0GuV5QlhJ%I%v?dfrj=D=v4a5 zm0mUf;9P?u0^y+Z+kc#F@0Iabia$*nf zup7`~%02v{zwahdQ;*0-MT#iO4ji5a2cQh7gHi2+pf$m9nrkr)G52kD#8qF$Uw&w8 z+}XIF19!A=U~z=~o>RjQk=l}yVaDAidK*`(%D?y*&+mgOnR&%D@N<}sS!fwp?c1^% zXrehjSDz_JoogX>&MhY8t68-g(}z)cdXjC%Iq&QZH?DDm$vSAArq+OFfxTY!s_bHO z)VzScS8h}(mHsy$W}FQ7RgXjmX4x@z3xf0NQ0RPBLH-b9Bxn0J{-?JvDO9{hc644u zbo{MV_a{6AgqM#nCk%EdE*c}YJ{f^;iFsAKxGAYUB7tY_id}fk0IJF91p6kq_*HHt-tBoIKa>6ISml{f2dk(mdeA8g>Uj%J}QQQ*3^y1eM~uf1My zL12@HIBK`ow~##i*dk3C_pgY+>E2aVvAfW#4bgG5%w|oCrUXKzr!rMPHBl#Ci({l8 zMD#%}@}g!1z;A(#Wg9NCw(5K%XT3_LtsND8=~du*oaj0Q)DqdtnYnh|oNDyz5RmoY zi1ZHU&u>9aJNvaFO1;fIEUgr2FY;H-FNKoV#FDU@myKvNYm2_hGQsnR_;p5R)yb+u z#FHPm3!;6;d$Z8uykYG}0Z>ez8<&Mosn)Nv{+EGH-aPf4Nf!Z7(A?0#4jb{`QkW-$ z#|LKvS(*GY^3BEzSszarZ_}cWF+jAb=y^y|3 zO-v1j4jrFGiqs_}dD>tG_`&ONsQ|-m`5F`cd7p?#BXLP3 ztxfPA3#1J711GX0hhU&|g&r~qt`ut;#9jQNNdL`r*bF3Ejo1xsd}$%FHu*ik>l0KG z+2(xpP3Ux{BCE4%7hHUp%$M8UM2$%5IdQq^~9L z>MNPf1S|TAL;txT^!e}0)6~()RIP=?%gxy<^!ak}0PCoaQ}XZg<52QLt%W;f=!1KE z@XPH<_g}$~*9-U)rKBWO=w;`5YwVjl@NtS*^!3vE@9P=ok>Bg}#TjRTM5uE~_sA@a zBd9#5-6hQyi}qTLz|QQ#EF&*ydB~`~#thRz&^p==t2mFP%RC9Q;@XAcx>{`D01M{| z%7qfBpxD0NrhX8n4m5f4|3duka^Q9&@d)RVo*16+VVt568e+1mTzxg*N8Kl67JybJ zZjFjQHhVSTUr`ar^GC?6th8cs-mjWbOZb@o%UUA2g8|(U2P!#Qzu0vX#Bhkiw!!-B zbLB$zHaT^xs}%FVf$+ikGp{vjJfV^(G@cXuu)8?1dJNNGjbc`>F!?~y@&&IO6|bNk zX&~V%`2bo!%MVD_wo3M~Coj)Bw%0lXa>+gIm-|F=CUZJClRB0D1^!Pwi_w^PTG{be zGJE1LR^68c2};<|}?LVvh?0%(AcjX3LA2LI=Iy=P_X-!Xnm|rTHG|G_ZJuAcd)1lEPDH z$+0Gg9U?oM6?eE@xh8PrmHy&Wqrk_%oZ;=BkXeI;x`#JJ5cP< z!YsJuNlFJJ^)1BSva2$=a)**x^m8Pc6$4OATMa(}KHM-j*UatE2jTH!u1$8Zc4L3)gwEbi5&9mdT<+=xORbxV&|Y8 zPKfQL&~8zJ7P+1%@%C-0bFoN!OXKhXD1>=46{}*~CSx+~&iVE^<@C?q|5BAq&XdsFixN3nF_)B!9Su;`RjyyAEmVIa z|2?IIP3>ds(~U(`bB}PGjXj!}g1-tNd9aj2VBCMUIoxcKai*VGA!i^8975@QuC6swUATcY+ixZtkKS!iYp>CBk za54hlE+EVrN$4kZ()zDX{2e~y7gCHZ{3d2~L_r~Y_Al1)3QRM^eS$=3)?Yg4!^xYR z1nQj#gB0ha8aB?jBCW^{_ty|(xyr_}q|@Kcod`Bw`ST~{v`oN1U|JRD{X)G#+utWM zFr(S62!o>H`lpxdSd>XnE9k%AL*|Db%Ou{pO+Na@rBotPly_@VI@0PESZ*p0#~;!D zkSH-<)pWG6uNhPDU)&o;BSc!BYb6BqN)%Z;Y;YzQ1#Ve!#`B?(?4J5_Vvp+g2F;kE zKx9(-_=5<mx~m zb%Pje+pO9L;g55;I2vjTH|+P(Xw#nXQ9d^ zc!2PS#3}*5^W;X68QyX?kIakCdKs;M2xJJB_yCpqp(wxIZ(l?;V`xB7RLN-NtiomX3**YGe)Nm;J-&_j~KV4xVu zeALj|DLiAvlG`#l_}U`I3HK5uynx|IbMt`2%Ku+<$ek7ly4lwwC|Mc(fu?FqzwCKVW^dCsAa#yk##dk31Zsj%p5n>%g1;mZl0W zVCP!0gwi&HLI<`lHdBM92o)W74@=Y)=Y{vPLtf-Hqng(StE%x#x@vE$I>Y-L7NEov zXUIN+q(ko`uq6uTKZ09VQ@JRS*5Cp9NJ@KX%#l|e=4y5NPY}dje@?pJG@aEEcc8a` zxJdY3j%lCbni3fE(6m-yHc#%VGn~T8yY-^ng}G(X7cNj@#Rnzl*LwL_s6&o&7}ne< zPbLtQ0B%QLhX;T4U3!ShU%n7+UfA{dFt7Q(zwIOCmX9E0Wz&fXNnG`LYhG&h3e8bw zN&(E0Ol0r?s_jS$Fk_C%reNqu5AtQ$s3_M%W)y`ibKFKqz;?-Z)@V9wBHoKrESnKn zr3!3RW4P!PctUxCqE;!SR)&9UolkO2a!-o?gtPc-1Rz58NEMv`t!tt&6M?b_S>aY< zyt0RDdFO&e56H6PVRW1cmBC}g>ab5o(cjJ6*rCglHD`FcrUUH?APeA`2=c7NJG8_F z+YZSBWABgjS;(TCK4`P1`Sdho=b=$ZIN*9@o*%icyU+$D92Kiq+e46Q%eT-d;QB~C z8zve~*Vw+#@jM-~giWoEI{B|YvackQsESBknJs^?2@HEXio-ml+a~Af&={tn#IB*B zSXIPfT<_aQ2?*jDn~Oab9K^Jm8D{>LZl19dOe9?^;1dEtGP|J_`{x`LN3-S4dS&?6 z$0*by=wsB*7EX_p`I$o2=F4y@JHWPb=sy^ni2X+3$-L}Y0lY*2-3!z854MD1Po#%I zddWAGAl|KcF0aAJ4smjs@8GSZ^FMsf1Jp9fAV#*$a6m;BITBxD(F)@!!Y9If+>>Ji} z=Su$mcaQ9LYk`u~)xudi=)%GG_ff0jL%(bA&Tjd({BAk4VYIiEFPW)9So9}AcF1AA zHN+tPeY(7a-GeDEt*?A_5!e& z+^}iIVb>K?Ov8Jaexgsbi{v}8j-R8y+gPb;$G`;#>;VP6VsdR}EQf`hRNgW&Tqq#Q zjH;H!U@B4ty z7`7nyM#-VZ1GEZUm3)hJln?9J5Ac}6gOe!TS zW#SZE829fWam~T+{iJvv>b^SS_E$^YGd<*pp%I9z7Wu?O!9(#BB1k-9J}CV?g6J7T zERm3N6o^XPA4OH5?+gcc4D(C(RZvO0W4133n5B@>B0xD zEDg&Kye%4!DxbP4@07{uJ~5i&a$LFLN5^d%pTujg1X1oN*Y_g^Wdket)*fU-67k|y z1je{;FHQeIy{1>Rq&c1#hFBmGod&|%YSbQCqjoB$Uz5U0AZ&qY`>`45Qy`F+g zg|U3}5h0n({GVnE$gb1M!CD?f4N4oT%=`F_;HWa_R(%r)!*+u{-(Hp!F_*U@<(?uN z8!dj<$cpJeRcJmJG!zonk2Io4#qsn{xKumgnv3YsQU6A+BDT-G|5FWVXJ*9VWK*RZz>e6IQfy)|=%LXtq zqq%}23e&Y%T&#RmY1tdlh8U6TV|}pP#QT6O9rqmP>UtxW71ev2sG>xA+DLJ2D%wbBKgkRcXf(x{>IUUIe+n_fHbJb{RqptP z-^czXmOw#}nx;(_)nb$ToZ8sj5!?s2MnI(>g(zu!+qlS_Tjo21w%pljm@MfGBlwfX zZES$EhY9y8?Guw_e7bc(md%=Z=#m zLp}>`YCim?|A%1*(}0B+ZVK zKYYMbV@a4}AwVd0yFnr)J%A2oZ8(-le- zQFVwO0=b=e5_ZJ>V*^v^NRH6H`H7gIX18E!RV`%X6L!Y>PH20YF3Ze_WN`Jdh-#QN zR!#73(wAtfzc-_+Mak|+wTi2?%*H0AF=X>b`6G?SvTERKhwBhw`|eDK`GA3{UU2(5 z%0IveLubO+^EVbIHfI_~B(XFUhg0CaBsp!0B?UL4l?@Gc&TUjq=5`&nqQKj<=gcn+ z6Ul<~d2L7vKR6Wl^}cr(qT9|X(pjMBfRoLodkxb0N#Nclzvg|Fv5MM6Sp3#RKPk{Q z2NQ@sCw{qHHlM6%5E$TIse<`|f%9URCVR<}p|5{m4z6zw7CB#0|Fx1D2dHR3=rjpA zr~XI?2rlTb3npA>r@o2%ssLUn<@77nx!DYThCOLoyvWCR#5FD|;yMH6A{UxYBD(ZZ z(#MVWilZ&FrSScxn@BZ^{HqI5174`O2Z0z)NjV-+x#k@ncxE^w-ZlJhXYEfQdQ)%F zfGWE77o?d(--qK&)6Yn>??oZ12w(`IgZ+3YzFhk<_QxA&`fpqSW1cP<=~9L3*Sq*l zeG}TrBEF9Y*h9Kh$#vTkP{5X<`1Mm=YH;$~YUbko%{tAV&+{GCDd>wBWtbxvg1sr@ zdL$Uf{&BESKdf&_X~us0=pMAozD?8xb7t~mAVGUNsUH~3BSk_X+fQFOWOL-=#k4<5 z=X_rIe4{TOs;@uQuosuev_$5dYGG+d14 zJ1D%ytWNVH!8tsd%6b;XTREr99Wo?smo{8N%3ngWsLb zZ;*?7_AlCy6$VR&u1FIk<*t@+mxwk0zSi|l=bd-kgJ~-QlwQP4)2k9_9-(ZXXLwxxjEc)u+rJ0Z4dgYjIYu zE|E3qFLB$LczYhSEVxHak}w_i?X*^nhy**1=$5<98-q^z2&T5ajA-8bBmL0p`|z+J z+M)hr+9RI76pgpmoGp_xBgUk1l!MrZn54{5W14GSSri#rQSP)ZD_vE+Ys}WmKG~AH zlO3jd`n}_c1m~(aIS-lpY%Ph47tzFC!rj>gz$aKebkuD>*9i|rRYl}CuQybLZ93qE z)X{OOkXOE1^01f>vqU$R;fLEYN6FAU9HWYP=ackN$FXqKW$1s#>>D^<7h*p zB!zA%bRh2VU#IL@mF*SypVlrCf+kD>^)31bRpDZ%e?JtP5>~-R4oxN%#P~sY2;~ZP z!itAcg?w3B>p8K(Mtb5}aGRspBVN`oPAyHdBR^Qo3`~5_uCxg*Dr zsPn2M1FjC-P-cR49?FCEDQWg?^SOaLW9fY2g56M-YyU3%WU*VFWOUD8w_JT??84oB zJy9WV_tn>hK!5$mlWnlC)%|>QR}Pxf_&~q8nd)zdVW+j2wihBYuJ7|{LgXK{TZboZ_uy1xt zZuZpgKNJhE4J_8Jr_L=46n7;*33cbHOW_>!F4^Qo?AcA5jv2%mDo7+XV0x({liNl4 zmU$}fjzASw&_4?`!HlEv@d$U@cBZAlNqPngkCBXf;$KQm;5=6wj*?ov3h9#Vd{$`;Y7`~XoW8ra$P=0vH&);dx zQ&GvLeQWv)f1Y2R|1jTKk1_=>o0(8=;l+U-z20~9lXAHqN3~sEeZ|Pcey6A53|o=9 z?c^tLTL^WM`zHt@7V=KiW-2e?Dytcc#dQ6(eHB&*O-Be!^QcUu?|QCtbO}8}`4Z?Y zRGe2XMV{K1)~MBT93VN00rv~;i2Ss&Jms-C-dKt+2HUHCcVx^Z^NdxV1&-235T*a^ z`5W}9`u8J-A1$BD^3}IabIRT%@%F(N<`PTwa7Y4_EVxf_Bbtia^Uf1_m?b9(KnWJaNeLCO>1z(> zRkod{yfpn7=Z&=NT!&CDW|u0`9{DN3kEMUjY0c9Lz%%J~!hf)ofC038C(YMKElGb?hizq@Fe*@)M00Q z%yGi-M@peo;R>s`fMkR7b86c5IWJ~F&0nRmBczn3Q#;n-l_*01EBG zoPf&WkR|IlJ1lm6vcLfYSR5A>l)}Ax&C79-7(VK*R1w_p7G3YMs$BCkj;}+qb!;*;?Ciwyr8ZMOS?R)E@SH5`h}>XiOSk)BAcW z;QDn#We2m`tJxotlB3SPQy99Ih~43hzaV4Tp5+2yQTg5_jyJ%^SW!J|=y%>L_$_g% z!fpR@{`^v<<_MNV5YL#kIJee$qW5=w+}o%h6D`vw+%GfOlF~bDmVBv#44jn2(Q|#= zeJ|I{^9925tGov#E4hN3%tIDdOKH*Vr#y+KD>CaCGDA(%j~AP~TJ{T4MZ}Z&Q&!&Z2t0QHW!)AfRX)okD)fc&atutd0pE zT3;@G8E_jwer9P>w{*uy+Ib2&FFB%Nd1LO9zXFCbSh$%AEp!gJzP(eflK}y453%33P=EVKA69L%v~05 zo*0~PGi?oXh&(Bn+XAu{4I}7Pir+e2w1ntB6~O~zdKJv3qDYIr6+ms(vMO?ec!Ix{(YE$_b{8ge*hX)wTa6Okk1r+=vAbgJy)B>f=%;~GbT@O0dV@N z-&Cu9y`xF}5Vx^0x5hY7HRPou=TF<7iF_OPOO*Pyw{NEhthSWCCC7^)G_8UrMRyux z0Nha?Q>JxjGW$RbnoEn{`GU_WM4$cgI9~8vliJtQb0ck>RW|yPg#zusIB@R)pRUrPyQ;ExB9E^>l9VWm1 zU^h8_{y10T45M5~PC7Y2u%J#^`r%hu3eAm#p0Q>{+F+DgWG~$KVcz;77r3o=cVO-p zHYNBbNKGJHF; z7pSbrPPaR%VTT)6VSvL5!zq?A)zR_tW&QimQ7244iRFMth2R5=xc6%CwZnximiQ94 zE;pwq7KL$bcPJl>Uqkzvv$@}hb$`C9Xi;l!s%37cmd!xyAWdch`$Lr`6p=vrT~=nq zRi~x!z_NSFb!o!D+RX&l5?6%He4>o=?Q16}s3RXK&K}+#W@PWdJFP@F!dcd;gg-pd3z5E-sb4v>9WQDJ`0#f2 z^Ns`4qFYC(s#7bxk1RG8DwH_R9qJ*aia8Af8mg$qi$!`#DNy|zDW!a%>x5AmF&sP0H=Zr^uW0+2-IFeVpQu?)%$QJs zaLq2ocVCXuq^W2p+hfY9Jj|7ouL)GjcC4pT{8S-=`Vp3J63SbYgVuYW>_I#A+j1?s`ksX?-prK`LD^i{LyBlY)1-IHQo3l`9m&S|KN9a zgnrXco?CHD1RGQRI?J{&WrG(P4BlENJX+sI|tb=N4T~>`~(dsYaha;jOD!i{H2T_JW#Z zne&C39M{Z&F-|wN`Fn0M)Vn%Kozunu{2V{Fd%L;|`NUQ67hf@-j}j`o`;ssKAAaMg z5G??xGo~q_-gqg@3xNKucZ+I4N*5OfSE&XkjI8Oq&ZgM-J>8bV^+kyw6kguyp~81* zE}r1#JERreq;W00s9~fL67vz)kL#l)k_!3tx?aYDI9@);kpu&9wLv_qq!_|Ars)>M z9pN;-sB$uRl^(KnpC45jTCR+U=bVFdHR}xl>*$Xo0uQp7JE&n;Nv?6c=$Be~8WCz? z(p0C~6N(<<7!qVfXAeBt`zdGXH{LgpTGia528F#qk%7DhVbcDY5UzO#msJ4=m_*DN z<<{N&mGef0#fY0ehGwd#{P^FiH(BgFV(h>39lx~9L~;?h74h@??ZtGLhe?vmDQCAeBJ$f!4^YZLg5h076>wCr7>Bs8O zi=kH1PAkRTCg$4x@k~Cz`QPjG5Hmvg|3=9sA=&_17_|&L+5aYU5DOXA-BbH}C34{E{;{O5L^xUcd delta 10047 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + + // Update 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 = context.application.createDocument(externalDocument); + await context.sync(); + + 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.Body#getComments:member(1)': - >- // Link to full sample: @@ -14673,6 +14696,29 @@ } } }); +'Word.DocumentCreated:class': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml + + // Update 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 = context.application.createDocument(externalDocument); + await context.sync(); + + 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.DocumentPropertyType:enum': - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index f5377bf4c..d5f1faa55 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -22,6 +22,7 @@ "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-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-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", diff --git a/view/word.json b/view/word.json index bcad9f6ea..0a83ecdff 100644 --- a/view/word.json +++ b/view/word.json @@ -22,6 +22,7 @@ "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-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-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", From a6e283e06a75889cebe3e0cbe9810dd5b95e4302 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 10 Apr 2023 11:50:53 -0700 Subject: [PATCH 154/336] [Outlook] (DelayDeliveryTime) Create snippet (#774) * Add DelayDelivery snippets * Map Script Lab snippet to MessageCompose.delayDeliveryTime member --- playlists-prod/outlook.yaml | 9 ++ playlists/outlook.yaml | 9 ++ .../delay-message-delivery.yaml | 123 ++++++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 23664 -> 23867 bytes snippet-extractor-output/snippets.yaml | 68 ++++++++++ view-prod/outlook.json | 3 +- view/outlook.json | 3 +- 7 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 samples/outlook/99-preview-apis/delay-message-delivery.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index c937d84c8..5861f36f4 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -743,5 +743,14 @@ rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml group: Preview APIs + api_set: + Mailbox: preview +- id: outlook-delay-message-delivery + name: Get and set message delivery (Message Compose) + fileName: delay-message-delivery.yaml + description: Get and set the delivery date and time of a message in compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.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 50b609723..b8fa14cc3 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -745,3 +745,12 @@ group: Preview APIs api_set: Mailbox: preview +- id: outlook-delay-message-delivery + name: Get and set message delivery (Message Compose) + fileName: delay-message-delivery.yaml + description: Get and set the delivery date and time of a message in compose mode. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml + group: Preview APIs + api_set: + Mailbox: preview diff --git a/samples/outlook/99-preview-apis/delay-message-delivery.yaml b/samples/outlook/99-preview-apis/delay-message-delivery.yaml new file mode 100644 index 000000000..510e2330b --- /dev/null +++ b/samples/outlook/99-preview-apis/delay-message-delivery.yaml @@ -0,0 +1,123 @@ +order: 5 +id: outlook-delay-message-delivery +name: Get and set message delivery (Message Compose) +description: Get and set the delivery date and time of a message in compose mode. +host: OUTLOOK +api_set: + Mailbox: preview +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")); + + let totalDelay = 0; + + function computeDelay(input) { + // This snippet identifies additional delivery delay time in minutes and adds it to the total delivery delay time of a message. + const element = document.getElementById(input) as HTMLInputElement | null; + if (element != null) { + const minutes = Number(element.value); + totalDelay += minutes; + setDeliveryDate(minutes); + } + } + + function getDeliveryDate() { + // This snippet gets the delivery date and time of a message. + Office.context.mailbox.item.delayDeliveryTime.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + const deliveryDate = asyncResult.value; + + if (deliveryDate.toString() === "0") { + console.log(`Message delivery date and time: ${new Date()}`); + } else { + const date = new Date(deliveryDate); + console.log(`Message delivery date and time: ${date.toString()}`); + } + }); + } + + function setDeliveryDate(minutes) { + // This snippet sets the delivery date and time of a message. + const currentTime = new Date().getTime(); + const milliseconds = totalDelay * 60000; + const timeDelay = new Date(currentTime + milliseconds); + Office.context.mailbox.item.delayDeliveryTime.setAsync(timeDelay, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + if (minutes === 1440) { + console.log(`Delayed delivery by an additional one day.`); + } else { + console.log(`Delayed delivery by an additional ${minutes} minutes.`); + } + }); + } + language: typescript +template: + content: |- +
+

This sample gets and sets the delivery date and time of a message in compose mode.

+

Required mode: Compose

+
+ +
+

Try it out

+
+ +
+

Delay message delivery by:

+ + + + + +
+ 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/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index bc93930856717bd9c387cdacfe226a3ae605f1fd..77d61db0a624167df7517377736decd9b85259da 100644 GIT binary patch delta 14752 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml + + // This snippet gets the delivery date and time of a message. + + Office.context.mailbox.item.delayDeliveryTime.getAsync((asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + const deliveryDate = asyncResult.value; + + if (deliveryDate.toString() === "0") { + console.log(`Message delivery date and time: ${new Date()}`); + } else { + const date = new Date(deliveryDate); + console.log(`Message delivery date and time: ${date.toString()}`); + } + }); +'Office.DelayDeliveryTime#setAsync:member(2)': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml + + function setDeliveryDate(minutes) { + // This snippet sets the delivery date and time of a message. + const currentTime = new Date().getTime(); + const milliseconds = totalDelay * 60000; + const timeDelay = new Date(currentTime + milliseconds); + Office.context.mailbox.item.delayDeliveryTime.setAsync(timeDelay, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + if (minutes === 1440) { + console.log(`Delayed delivery by an additional one day.`); + } else { + console.log(`Delayed delivery by an additional ${minutes} minutes.`); + } + }); + } 'Office.EnhancedLocation#addAsync:member(1)': - >- // Link to full sample: @@ -11119,6 +11164,29 @@ console.log(`Conversation ID: ${Office.context.mailbox.item.conversationId}`); +'Office.MessageCompose#delayDeliveryTime:member': + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml + + function setDeliveryDate(minutes) { + // This snippet sets the delivery date and time of a message. + const currentTime = new Date().getTime(); + const milliseconds = totalDelay * 60000; + const timeDelay = new Date(currentTime + milliseconds); + Office.context.mailbox.item.delayDeliveryTime.setAsync(timeDelay, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(asyncResult.error.message); + return; + } + + if (minutes === 1440) { + console.log(`Delayed delivery by an additional one day.`); + } else { + console.log(`Delayed delivery by an additional ${minutes} minutes.`); + } + }); + } 'Office.MessageCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 2d4cd1048..d314a0099 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -77,5 +77,6 @@ "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml" + "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml", + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 6479ea4ef..dc042b400 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -77,5 +77,6 @@ "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml" + "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml", + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml" } \ No newline at end of file From 518d86e9d36875cabb596fd250adc2f0a142ef4a Mon Sep 17 00:00:00 2001 From: ndeleuze <107273303+ndeleuze@users.noreply.github.com> Date: Thu, 20 Apr 2023 13:13:13 -0700 Subject: [PATCH 155/336] Adding closeAsync snippet sample (#767) * Adding closeAsync snippet sample * Updating yaml files to match exisitng format * Update outlook.yaml * Update outlook.yaml removing new line --- playlists-prod/outlook.yaml | 11 +++- playlists/outlook.yaml | 9 +++ .../outlook/99-preview-apis/close-async.yaml | 63 +++++++++++++++++++ view-prod/outlook.json | 3 +- view/outlook.json | 3 +- 5 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 samples/outlook/99-preview-apis/close-async.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 5861f36f4..9b37aec59 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -753,4 +753,13 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml group: Preview APIs api_set: - Mailbox: preview \ No newline at end of file + Mailbox: preview +- id: outlook-close-async + name: Close the current message and discard changes (Message Compose) + fileName: close-async.yaml + description: Close the current message and discard the 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 diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index b8fa14cc3..53139ac24 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -754,3 +754,12 @@ 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: Close the current message and discard the 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 diff --git a/samples/outlook/99-preview-apis/close-async.yaml b/samples/outlook/99-preview-apis/close-async.yaml new file mode 100644 index 000000000..cebcff1db --- /dev/null +++ b/samples/outlook/99-preview-apis/close-async.yaml @@ -0,0 +1,63 @@ +order: 3 +id: outlook-close-async +name: Close the current message and discard changes (Message Compose) +description: Close the current message and discard the changes when specified. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#close-async").click(closeAsync); + + function closeAsync() { + // This snippet closes and discards the current message being composed and discards any unsaved changes. The API call works on new messages being composed, inline replies, and existing drafts when the optional property, discardItem, is set to true. When discardItem is set to false or isn't defined and the closeAsync call attempts to close a new message with unsaved changes, the user is prompted to save a draft, discard the changes. or cancel the close operation. + + Office.context.mailbox.item.closeAsync( + { discardItem: true }, + (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 close the current message being composed and discard any unsaved changes.

+

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 d314a0099..7fae12c6f 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -78,5 +78,6 @@ "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml" + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index dc042b400..b5251129b 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -78,5 +78,6 @@ "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml" + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml" } \ No newline at end of file From 08756b827cd2432c9d78f0118dc9d62ef5b85449 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 21 Apr 2023 11:28:40 -0700 Subject: [PATCH 156/336] [Outlook] (closeAsync) Map Script Lab snippet to reference docs (#780) * Map Script Lab snippet to closeAsync method * Apply suggestions from code review Co-authored-by: Elizabeth Samuel * Apply suggestion from review --------- Co-authored-by: Elizabeth Samuel --- playlists-prod/outlook.yaml | 20 +++++++-------- playlists/outlook.yaml | 18 +++++++------- .../outlook/99-preview-apis/close-async.yaml | 7 +++--- snippet-extractor-metadata/outlook.xlsx | Bin 23867 -> 23822 bytes snippet-extractor-output/snippets.yaml | 23 ++++++++++++++++++ view-prod/outlook.json | 4 +-- view/outlook.json | 4 +-- 7 files changed, 50 insertions(+), 26 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 9b37aec59..3810acddf 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -723,6 +723,15 @@ 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: Close the current message and discard 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-sensitivity-labels-sensitivity-labels-catalog name: Work with the sensitivity labels catalog fileName: sensitivity-labels-catalog.yaml @@ -753,13 +762,4 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.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: Close the current message and discard the 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 + Mailbox: preview \ No newline at end of file diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 53139ac24..6ef296186 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -723,6 +723,15 @@ 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: Close the current message and discard 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-sensitivity-labels-sensitivity-labels-catalog name: Work with the sensitivity labels catalog fileName: sensitivity-labels-catalog.yaml @@ -754,12 +763,3 @@ 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: Close the current message and discard the 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 diff --git a/samples/outlook/99-preview-apis/close-async.yaml b/samples/outlook/99-preview-apis/close-async.yaml index cebcff1db..cebf650a1 100644 --- a/samples/outlook/99-preview-apis/close-async.yaml +++ b/samples/outlook/99-preview-apis/close-async.yaml @@ -1,7 +1,7 @@ order: 3 id: outlook-close-async name: Close the current message and discard changes (Message Compose) -description: Close the current message and discard the changes when specified. +description: Close the current message and discard any unsaved changes when specified. host: OUTLOOK api_set: Mailbox: preview @@ -10,8 +10,9 @@ script: $("#close-async").click(closeAsync); function closeAsync() { - // This snippet closes and discards the current message being composed and discards any unsaved changes. The API call works on new messages being composed, inline replies, and existing drafts when the optional property, discardItem, is set to true. When discardItem is set to false or isn't defined and the closeAsync call attempts to close a new message with unsaved changes, the user is prompted to save a draft, discard the changes. or cancel the close operation. - + // This snippet closes the current message being composed and discards any unsaved changes when the optional property, discardItem, is set to true. + // The API call works on a new message being composed, a reply, or an existing draft. + // When discardItem is set to false or isn't defined on a new message with unsaved changes, the user is prompted to save a draft, discard the changes, or cancel the close operation. Office.context.mailbox.item.closeAsync( { discardItem: true }, (asyncResult) => { diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 77d61db0a624167df7517377736decd9b85259da..43efca090798a66a31c67ed4b20fa48afb9ff4e4 100644 GIT binary patch delta 13832 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 delta 13830 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 + // 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. + + // The API call works on a new message being composed, a reply, or an + existing draft. + + // When discardItem is set to false or isn't defined on a new message with + unsaved changes, the user is prompted to save a draft, discard the changes, + or cancel the close operation. + + Office.context.mailbox.item.closeAsync( + { discardItem: true }, + (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + }); 'Office.MessageCompose#conversationId:member': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 7fae12c6f..40d228683 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -76,8 +76,8 @@ "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml", - "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml" + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index b5251129b..dd649dd7e 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -76,8 +76,8 @@ "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml", - "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml" + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml" } \ No newline at end of file From fa2b92dceee28efed3cefb47614d538bba6875a2 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 21 Apr 2023 11:48:31 -0700 Subject: [PATCH 157/336] [Outlook] Fix snippet descriptions (#781) --- playlists-prod/outlook.yaml | 20 +++++++++---------- playlists/outlook.yaml | 20 +++++++++---------- .../outlook/99-preview-apis/close-async.yaml | 4 ++-- .../delay-message-delivery.yaml | 2 +- view-prod/outlook.json | 4 ++-- view/outlook.json | 4 ++-- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 3810acddf..495c36f28 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -723,15 +723,6 @@ 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: Close the current message and discard 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-sensitivity-labels-sensitivity-labels-catalog name: Work with the sensitivity labels catalog fileName: sensitivity-labels-catalog.yaml @@ -757,9 +748,18 @@ - id: outlook-delay-message-delivery name: Get and set message delivery (Message Compose) fileName: delay-message-delivery.yaml - description: Get and set the delivery date and time of a message in compose mode. + description: Gets and sets the delivery date and time of a message in compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.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 \ No newline at end of file diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 6ef296186..240eb2d0f 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -723,15 +723,6 @@ 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: Close the current message and discard 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-sensitivity-labels-sensitivity-labels-catalog name: Work with the sensitivity labels catalog fileName: sensitivity-labels-catalog.yaml @@ -757,9 +748,18 @@ - id: outlook-delay-message-delivery name: Get and set message delivery (Message Compose) fileName: delay-message-delivery.yaml - description: Get and set the delivery date and time of a message in compose mode. + description: Gets and sets the delivery date and time of a message in compose mode. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.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 diff --git a/samples/outlook/99-preview-apis/close-async.yaml b/samples/outlook/99-preview-apis/close-async.yaml index cebf650a1..d64578bb0 100644 --- a/samples/outlook/99-preview-apis/close-async.yaml +++ b/samples/outlook/99-preview-apis/close-async.yaml @@ -1,7 +1,7 @@ -order: 3 +order: 6 id: outlook-close-async name: Close the current message and discard changes (Message Compose) -description: Close the current message and discard any unsaved changes when specified. +description: Closes the current message and discards any unsaved changes when specified. host: OUTLOOK api_set: Mailbox: preview diff --git a/samples/outlook/99-preview-apis/delay-message-delivery.yaml b/samples/outlook/99-preview-apis/delay-message-delivery.yaml index 510e2330b..7fbe89d22 100644 --- a/samples/outlook/99-preview-apis/delay-message-delivery.yaml +++ b/samples/outlook/99-preview-apis/delay-message-delivery.yaml @@ -1,7 +1,7 @@ order: 5 id: outlook-delay-message-delivery name: Get and set message delivery (Message Compose) -description: Get and set the delivery date and time of a message in compose mode. +description: Gets and sets the delivery date and time of a message in compose mode. host: OUTLOOK api_set: Mailbox: preview diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 40d228683..7fae12c6f 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -76,8 +76,8 @@ "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml" + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index dd649dd7e..b5251129b 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -76,8 +76,8 @@ "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", "outlook-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml", "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml" + "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml", + "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml" } \ No newline at end of file From dd867b3d36dc3618be2324ef316f9651826eed0e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 26 Apr 2023 10:38:05 -0700 Subject: [PATCH 158/336] [Word] (CustomXMLPart) Add snippet that includes namespace URI (#777) * [Word] (CustomXMLPart) Add snippet that includes namespace URI * Update based on feedback * Update ordering --- playlists-prod/word.yaml | 13 +- playlists/word.yaml | 13 +- .../manage-custom-xml-part-ns.yaml | 284 ++++++++++++++++++ .../50-document/manage-custom-xml-part.yaml | 12 +- snippet-extractor-metadata/word.xlsx | Bin 18054 -> 18190 bytes snippet-extractor-output/snippets.yaml | 69 ++++- view-prod/word.json | 1 + view/word.json | 1 + 8 files changed, 380 insertions(+), 13 deletions(-) create mode 100644 samples/word/50-document/manage-custom-xml-part-ns.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index c0b8b77f3..e77a0ec08 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -273,8 +273,19 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-custom-xml-part-ns + name: Manage a CustomXmlPart with the namespace + fileName: manage-custom-xml-part-ns.yaml + description: >- + This sample shows how to add, query, replace, edit, and delete a custom XML + part in a document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-document-manage-custom-xml-part - name: Manage a CustomXmlPart + name: Manage a CustomXmlPart without the namespace fileName: manage-custom-xml-part.yaml description: >- This sample shows how to add, query, edit, and delete a custom XML part in a diff --git a/playlists/word.yaml b/playlists/word.yaml index b226b1039..1fadd1c99 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -273,8 +273,19 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-manage-custom-xml-part-ns + name: Manage a CustomXmlPart with the namespace + fileName: manage-custom-xml-part-ns.yaml + description: >- + This sample shows how to add, query, replace, edit, and delete a custom XML + part in a document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-custom-xml-part-ns.yaml + group: Document + api_set: + WordApi: '1.4' - id: word-document-manage-custom-xml-part - name: Manage a CustomXmlPart + name: Manage a CustomXmlPart without the namespace fileName: manage-custom-xml-part.yaml description: >- This sample shows how to add, query, edit, and delete a custom XML part in a diff --git a/samples/word/50-document/manage-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml new file mode 100644 index 000000000..ff6cc8298 --- /dev/null +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -0,0 +1,284 @@ +order: 8 +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.' +host: WORD +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)); + + async function addCustomXmlPart() { + // Add 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(); + }); + } + + async function query() { + // Query 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"); + } + }); + } + + async function getNamespace() { + // Get 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"); + } + }); + } + + async function replace() { + // Replace 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(); + await context.sync(); + + readableXml = addLineBreaksToXML(updatedXmlBlob.value); + console.log("Replaced custom XML part:"); + console.log(readableXml); + } else { + console.warn("Didn't find custom XML part to replace"); + } + }); + } + + async function insertAttribute() { + // Insert 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"); + } + }); + } + + async function insertElement() { + // Insert 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"); + } + }); + } + + async function deleteCustomXmlPart() { + // Delete 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(); + 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"); + } + }); + } + + function addLineBreaksToXML(xmlBlob: string): string { + const replaceValue = new RegExp(">"); + return xmlBlob.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 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

+ + + + + + + +
+ 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-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 3b6e05c44..9aadb1a0e 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -1,6 +1,6 @@ -order: 8 +order: 9 id: word-document-manage-custom-xml-part -name: Manage a CustomXmlPart +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.' host: WORD api_set: @@ -58,7 +58,7 @@ script: console.log(clientResult.value[i]); } } else { - console.warn("No custom XML part to query"); + console.warn("Didn't find custom XML part to query"); } }); } @@ -82,7 +82,7 @@ script: console.log("Successfully inserted attribute:"); console.log(readableXml); } else { - console.warn("No custom XML part to insert attribute into"); + console.warn("Didn't find custom XML part to insert attribute into"); } }); } @@ -111,7 +111,7 @@ script: console.log("Successfully inserted element:"); console.log(readableXml); } else { - console.warn("No custom XML part to insert element into"); + console.warn("Didn't find custom XML part to insert element into"); } }); } @@ -144,7 +144,7 @@ script: console.error(strangeMessage); } } else { - console.warn("No custom XML part to delete"); + console.warn("Didn't find custom XML part to delete"); } }); } diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 94d1dcbf1dd5be7ed1eab8f48ef9dafefc5ae210..df10551ac91dead954354f7b2c4e84c8cb5e4b69 100644 GIT binary patch delta 10306 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 MiWU)B;y=Xy0~O$dN&o-= delta 10154 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index ed07c8663..5dd700b7c 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -14534,7 +14534,7 @@ console.error(strangeMessage); } } else { - console.warn("No custom XML part to delete"); + console.warn("Didn't find custom XML part to delete"); } }); 'Word.CustomXmlPart#getXml:member(1)': @@ -14587,7 +14587,7 @@ console.log("Successfully inserted attribute:"); console.log(readableXml); } else { - console.warn("No custom XML part to insert attribute into"); + console.warn("Didn't find custom XML part to insert attribute into"); } }); 'Word.CustomXmlPart#insertElement:member(1)': @@ -14619,7 +14619,7 @@ console.log("Successfully inserted element:"); console.log(readableXml); } else { - console.warn("No custom XML part to insert element into"); + console.warn("Didn't find custom XML part to insert element into"); } }); 'Word.CustomXmlPart#query:member(1)': @@ -14649,7 +14649,42 @@ console.log(clientResult.value[i]); } } else { - console.warn("No custom XML part to query"); + console.warn("Didn't find custom XML part to query"); + } + }); +'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 + + // Replace 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(); + await context.sync(); + + readableXml = addLineBreaksToXML(updatedXmlBlob.value); + console.log("Replaced custom XML part:"); + console.log(readableXml); + } else { + console.warn("Didn't find custom XML part to replace"); } }); 'Word.CustomXmlPart#id:member': @@ -14678,6 +14713,30 @@ 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 + + // Get 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: @@ -14731,7 +14790,7 @@ console.log(clientResult.value[i]); } } else { - console.warn("No custom XML part to query"); + console.warn("Didn't find custom XML part to query"); } }); 'Word.Document#changeTrackingMode:member': diff --git a/view-prod/word.json b/view-prod/word.json index d5f1faa55..2472ccedb 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -28,6 +28,7 @@ "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", "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml", + "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-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", diff --git a/view/word.json b/view/word.json index 0a83ecdff..abfae20d3 100644 --- a/view/word.json +++ b/view/word.json @@ -28,6 +28,7 @@ "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", "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-settings.yaml", + "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-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", From 24e9cef3c0435aea6c16e9dd23e78e92e8c7d3bf Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 27 Apr 2023 08:21:16 -0700 Subject: [PATCH 159/336] [Word] (InlinePicture.imageFormat) Fix mapping (#784) --- snippet-extractor-metadata/word.xlsx | Bin 18190 -> 18177 bytes snippet-extractor-output/snippets.yaml | 10 ++++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index df10551ac91dead954354f7b2c4e84c8cb5e4b69..a1649c5700e0e931921a6e89820354cc4bbbf9ce 100644 GIT binary patch delta 8752 zcmZ8{Ra6{6*W}=?!67g(kU@hx1RdO6g1bv_8)Sk7oxwd=g1fsDBv^t33+{p7&gT1e z_dk2KAG#l^Z}&r=dvBepPDnrsOF*jC!9dLw8d5_TV7!K!xMg#Z1m`!tgg&bEh0+%! zu`-sCm1UPVInl9^=a{2$@w}lgzhC#oV=_rkFE^HT4&r=wvodvHqfa)R_bu`htK4nB z9D0RT@?S^lA~Rq8T~x~WLR~o=%{q$Lh7oV=%z9J^r2pi>7AXN5{M=)y<)CrL*__nI zHbVXi$p#{5eKB@|rxSmZHJ_8`u#TZYg3E)RqW?#9m_i7ujI)54jdF4`Q^gMegP|1Z zw40}?Ajl{)1hu-@b79_=b&Lv_=hyeM4g(^WDR<<;#2C!ldxHO}2yu3MHX^|O-5yKF zu2d;cX(l?p9boSS4BnM!=7?MWSRk6%H-H+6u&% znm^Y0E;tJ?7}}2C4$Pwc3{Fa}!*jv$#wZb|LTx*Z8dz16v$}Ol;rkuj)rpSX;za=K zJ%JuKnJ$`@aS)?0K{xs*Hh2l;jm|y<42y2XkoLYjqs@hb+UmJaR00dPDTmy^je876!Y1 zVX9FoE7l1z#1nhspd$jMr$>O}ldDefcQ-cE1r@1_8?D#2_Ue=lY@WFmC#n3VDh|og zX;<@mpx)+J`~A)O%;H|q~VzwoIy{?(+u6u(zX~M5OoVaION!j)D# zC8d!*?ou2#buWBC`fo05R)7!>t>Npsv#gC8-?!5~#nP6J@`2P!!aCxQwelDxvgb2% z?K)Xi*q6bWR>R+$(iuF zH1X4jAcuVCs{z7$hq*%$Edn4{v#yz4=RB9dVcru&2&iM)%%^hcvskr!E0b5D4 z_vR}#w9!fftnFK^4S^1tit?$XWnmIDAIb4J z6jsJ7L%d#rB|$CwP$U50CNlW9$Ab8(Vm8zWF=90MQXln8lwe%gaxp6s>Mm_0x4K|}5?7Ss>sI3=F1P7>)Z z%%EMt_d7iY=O-;a&s)&B8@it0m#w{;d^M;r^!|RQ1^H8eo1(>aWD5KDb+e;*eEDZnl=;cUFmDK=+OsxUaza_1 z4W@g{fFKQA&vJatvWD5_@>+@VT_RLCY9yahl&jPJ7k5zDs9=w4RaN(0qjbhbajVPp z0GN5;6luWjxc98kVZfS;$pulQ+qIEM z;WL?hywKa+6X-1yQKWy??hTxCm=UVA*Zh1N&V-^JTqaHNPSEvg2D+rPej+BrwUnu> z4I?K#`-)yd;iOSVyG)UK7?l~jZgj{$jQLtg{+1BwvmuO5vn^q0mhAPY}_v(yo-ndW1t-eN)0bmIW?{nkhltbedSgoIN*HnGzWD+h2ot zy;wcR68wV+B3A9*BE9lK`x0XCe!jkGdO3+vS!%$53T%Gc!(HyvjFPU%l1Aa%_}%?k z)0a;gnPT{D_S{)TN?@6lcU}&B^65Tr?r1)9qKP?1C_!^3NFHZP)ThzuI`LRb>`OvQ z7v>mr-XxaAkrk!ZH?FSUPJf)Cy0TC7%mY0Zhhlh_4w6$3>uF^m*|NkhR)B3gXcstB zTJ#D_+djZ@NX|y(a9ayXqPZ`<%4>8oX!)sFCWgEgeYJsigG0-?F@zZx8NJNhRMps@ zG}LzhbkLGo6E5@Aw?K$MeM5*ultA9_W6A#ERYKaqP2Ip3)|}}#Cci4aU}_2{#wZbG z^ArDSG}n1mpHgx_5Pm|t#Bz5d5UOFtGB4TY$%day`8W2=>AQXkW~#r-TlEB zR-7}!SQ32_8IG0RNikfFAsU$=*b2D}bg`Z@T-t0BHS%W!BY}Rn3TydZh5q7)%wKP)=w_SMS(ALBCsnTE!qii z1~j|D#5*Rb0+|-~w{Cg@^z$8z#_&QPlb>$9=q|cV_+o)cx*FTh`dK=-IB_~CJPbt7 zR(f-LpBCUMQCx;O-Z8pRINK)a#97>#D^ zwNHO|2t~r3tCza=%bW`HBqP(NU*T?7)l_o1vWsgdb0R24n6!Bo1ATXsQE;KrZ2-gH|L&owCv9|AD8aE>V%hPb>@m zCssjBE|8%gmox6?(m*~gEKgGP&N3a{${rJ{ zMx4V0xlBPS^`RJ-(6&RK3XHi?GgJgm4xcII(flh+518sssqxZ@3#%Duur5^I2SnW{ z6{;VcX9`#ZC`LK!fnGY6Z!tB4J_uOW5XBnwbwtqBOEl(av~=u1P8=8}mY_s=Q5W$f z+k@pbL`MJcdC=Clz^Evxs_}A|fkI#s?WW6dVt9`IC_l9Sj@55LMSAb};8}mJQTO)` zC}nO0J1(P{d* z?&ZtEF&@xQ8g0n5lxi8YRB8$ttNEFS#${HAPvm#V&BK%mL0Y9f__6LS+2vp%Ufn@~ zQG#VJykfqknvGI?%gT6%-ZAix?^jZ=rq$ufs_2{G(8qDwsEjNI?x-8HNN@G8xk9St zNALQ7xmwNZ4bK0m5a*qdv@|;Ei5vDsZqK%P$u@_|W>4G7M=!_AZr5(SnqK|mB%nI$ z*S}*<*FwH5mcnuB&zm%0?@F|(*B2NU89Im+wbN-mps=O5jd%N=vzd~hGSz%`AbXv` z>yNvHuJmE479L)RR)SLMK08W8~Znw??`W>LlO)iE%)@EP)kT{DXMiGydS zRi6kn;|O!q>5fRxSCqKYsvs&xvXe?dAXs|2_5g(GM9XbDxel7B4#hzIa>#?X3DH zhnQ0xM=6^`m}4#pr}!pnbYrhwp%P1MV&Qh#1j^buCVmj>;|m2-j9$pX(AE-bC6O8O zB)_LO#G44HTE0E*85Kdl$aI~0#Kh}FOd0_DP*aAw4XMeJuWSNqeH^oj?+kFGAmPxz zkwgF45&D`+eH2J@?3A^gBPn2Ffj0dK?c5o(svrDlKGTXQ6WXsG+ok}j*MubotKZ;>`q^hau$fSRE-(RVUE8KbweTl5V!cJ)rnhW6N2ljym*v?Iod(6LuBFpugA{9elIO!9bHU3GX@c? zNi}-@Wf72mwpI7QUlV7bfmVmg;{!aZ@Y|4-^=4iU4!JHu%RneC=vP%4R0$$ zvvIn{%V_=a4?ceJoB^NDU!j3qG3JAIXTP2?5rGMr?}<)-C3=m^J$@-2smo`sB`5Mm z%TDZ!{=?gUfbI9=S<#)~kdFJB`u1MQhN5JWE+%`GIY1Dtz9FDXqW>h%%2j``qbac% zr_zl6M*w@`Ji<;0N)%@YTlmK!&lSB0Sn~(x*^w$wi!p;=Yy!pJE2(mQ%l->WITbDq zf^-`1F$&mGs?UMaDxcDmXJi{1qW%9{A06)jlND2Qb2Kzx{$zwu#i#UVy{UV5+CQlc zTPX>r%`n*sOzjFM(F_&6J`5}q_&yePAUbxH8ukUVP8o_O-uMJ)s!*EP#C27!tg%s% zU#%^)XdhZt9=^oq7*1ir$JJ7Jd@o=1fKIJ2PFTp zTih8HwoarD9EjlcAODnTE15yRQfq)WyA>PQw9O)Yq6Ilc+ov3(oi*gHH?#?CyILX9 zqaE4xuZ9lD9SM(h&|Z;P1e6s-xghz|h=l)@qQTWC@kRZ#Yw-oh>~T{hb6>AzP5mNWnsnZEB&PL{TFT6v+iXr1c)RnPYAb{Xfrk)-+IZ` z!G&M5FJsTT{uWl6W$DLY3)n}qhV7#bQ=N#I`$IX`@nkXHUo{_2*IB1?K!hws;uS4Z zPp@&T;n)3ZZN`;rUe;L!|y8jqyeapFRVzDs~!*sdfO!Ee>qvR#ro zNflGnO6^i&qpkF^bh>YlJd=Go&dlH{UMRDYtsM;B5QcTY=Tbjm5k+C(*H3lggLF4= zeCQ8c^fZIThN`lndvfDtbxVd}oVJ(%>nS`hd$CGIH2l3K*8Lej1uc?AL}1MiseZqH z{tf$6J&jHj8c!3=v4B%}v(76L8bK%x(fh`OG4QU{ibjr*kwBB6Y7n6JD==uOt~@E^ z?A?h1zeS&i;BhSk{v6thq)4-UYP9CG3Z<^~4RX_x!av4%i_6%Z%_Acf&34F#VJ!d@ z({NT{2R~>jcL4Ekoh82cxF(8yNLi)cVg~D_Ip)E(Ce3LW-Zw6No(@@VEKGTlPq=YG zgPh2e=ce6B`5?QwG5%CRAE}b?>~))Q2r}>C$de!BZv@N95}$xT3{uIDqPRQ9P{J<; z36W{27T~-=jX@lRKjux-h_`1R$+9>xq7-As@=-j36X^=(FbWLxNNL}sK^zLhgMxVa zx=Q?g)L75{Zy&T^OO*rSR^YmU!pTdlK!Lwah1;#Y=lnnj1G553t3$f;xC;t>)a!;x*fbJO~ULA3t{286qYGj9^0F1bOEc1`QU2d$+x z;|4LJ$2OA+-^?(@$o66|$|(d%7RJ}IXwy0CnQg{d85?@1xFc_54`Nx1F8fL|PZ((1 z9{b`FJIjKB%*%~TACwI=`>~w2sHCf^3Vxj^(5AANu^@AVIrAaXLYZf&2~#$XgUW04 zJKyF=ex-N7iazgI)T0@&eNOWT^p z4NG)+NTddX`+eF}TIGcJ9icer>v3+BGXMIJ2a2y{kcbBcw??me3<$R0yT#UC(Al!U*QehMC zF9HiAHR^tj3*lqNDzg z=B@ad-9j70E0hu%r|XNv^&aSpaPY(3$p89FH#Q^%

7sK+ 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml // Get the first image in the document. await Word.run(async (context) => { const firstPicture = 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 format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); @@ -15066,16 +15067,17 @@ '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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml // Get the first image in the document. await Word.run(async (context) => { const firstPicture = 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 format: ${firstPicture.imageFormat}`); // Get the image encoded as Base64. const base64 = firstPicture.getBase64ImageSrc(); From 7896f6f8d37a645c2375e48247cf07a56fa598df Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 28 Apr 2023 14:07:37 -0700 Subject: [PATCH 160/336] [Outlook] (delay delivery) Update snippet (#786) --- samples/outlook/99-preview-apis/delay-message-delivery.yaml | 5 ++--- snippet-extractor-output/snippets.yaml | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/samples/outlook/99-preview-apis/delay-message-delivery.yaml b/samples/outlook/99-preview-apis/delay-message-delivery.yaml index 7fbe89d22..8fff026cb 100644 --- a/samples/outlook/99-preview-apis/delay-message-delivery.yaml +++ b/samples/outlook/99-preview-apis/delay-message-delivery.yaml @@ -35,9 +35,8 @@ script: } const deliveryDate = asyncResult.value; - - if (deliveryDate.toString() === "0") { - console.log(`Message delivery date and time: ${new Date()}`); + if (deliveryDate === 0) { + console.log("Your message will be delivered immediately when you select Send."); } else { const date = new Date(deliveryDate); console.log(`Message delivery date and time: ${date.toString()}`); diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 5cdd6621f..c97ea9613 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9603,9 +9603,8 @@ } const deliveryDate = asyncResult.value; - - if (deliveryDate.toString() === "0") { - console.log(`Message delivery date and time: ${new Date()}`); + if (deliveryDate === 0) { + console.log("Your message will be delivered immediately when you select Send."); } else { const date = new Date(deliveryDate); console.log(`Message delivery date and time: ${date.toString()}`); From fb1058adb6c6af989f4bdda94b5824a3bfb654c6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 11 May 2023 09:46:24 -0700 Subject: [PATCH 161/336] [Word] Minor cleanup (#788) --- playlists-prod/word.yaml | 6 +- playlists/word.yaml | 6 +- .../insert-and-change-content-controls.yaml | 2 +- .../15-images/insert-and-get-pictures.yaml | 4 +- samples/word/20-lists/insert-list.yaml | 2 +- samples/word/20-lists/organize-list.yaml | 2 +- .../get-paragraph-on-insertion-point.yaml | 4 +- samples/word/25-paragraph/get-word-count.yaml | 2 +- .../25-paragraph/paragraph-properties.yaml | 6 +- samples/word/25-paragraph/search.yaml | 4 +- samples/word/35-ranges/compare-location.yaml | 2 +- samples/word/40-tables/manage-formatting.yaml | 18 +- samples/word/40-tables/table-cell-access.yaml | 2 +- .../50-document/insert-external-document.yaml | 2 +- .../50-document/manage-change-tracking.yaml | 6 +- samples/word/50-document/manage-comments.yaml | 18 +- .../manage-custom-xml-part-ns.yaml | 14 +- .../50-document/manage-custom-xml-part.yaml | 10 +- .../word/50-document/manage-footnotes.yaml | 18 +- samples/word/50-document/manage-settings.yaml | 6 +- samples/word/90-scenarios/doc-assembly.yaml | 8 +- .../content-control-ondeleted-event.yaml | 2 +- .../insert-and-get-pictures.yaml | 4 +- .../insert-formatted-text.yaml | 1 + samples/word/default.yaml | 2 +- snippet-extractor-output/snippets.yaml | 209 +++++++++--------- 26 files changed, 185 insertions(+), 175 deletions(-) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index e77a0ec08..f64dfe691 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -232,7 +232,7 @@ api_set: WordApi: '1.4' - id: word-document-manage-comments - name: Comments + name: Manage comments fileName: manage-comments.yaml description: >- This sample shows how to perform basic comments operations, including @@ -317,8 +317,8 @@ name: Delete content controls fileName: content-control-ondeleted-event.yaml description: >- - Register, trigger, and deregister onDeleted event that tracks the removal of - content controls. + Registers, triggers, and deregisters onDeleted event that tracks the removal + of content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml group: Preview APIs diff --git a/playlists/word.yaml b/playlists/word.yaml index 1fadd1c99..41210be6e 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -232,7 +232,7 @@ api_set: WordApi: '1.4' - id: word-document-manage-comments - name: Comments + name: Manage comments fileName: manage-comments.yaml description: >- This sample shows how to perform basic comments operations, including @@ -317,8 +317,8 @@ name: Delete content controls fileName: content-control-ondeleted-event.yaml description: >- - Register, trigger, and deregister onDeleted event that tracks the removal of - content controls. + Registers, triggers, and deregisters onDeleted event that tracks the removal + of content controls. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml group: Preview APIs 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 6b289e81b..161de751f 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 @@ -38,7 +38,7 @@ script: async function modifyContentControls() { // Adds title and colors to odd and even content controls and changes their appearance. await Word.run(async (context) => { - // Gets the complete sentence (as range) associated with the insertion point. + // 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"); diff --git a/samples/word/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index 2ad19dbfa..7a7a62fa7 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -25,7 +25,7 @@ script: } async function getImage() { - // Get the first image in the document. + // Gets the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); firstPicture.load("width, height"); @@ -41,7 +41,7 @@ script: } async function setup() { - // Setup by adding a dummy paragraph. + // Sets up by adding a dummy paragraph. await Word.run(async (context) => { const body = context.document.body; body.clear(); diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 09fae2d97..84d6ec71e 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -29,7 +29,7 @@ script: 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"); - // Sets up list level for the list item. + // Set up list level for the list item. paragraph.listItem.level = 4; // To add paragraphs outside the list, use Before or After. diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index bac2e009e..00113c034 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -12,7 +12,7 @@ script: $("#setup").click(() => tryCatch(setup)); async function insertOrganizeList() { - // Insert a list starting with the first paragraph then set numbering and bullet types of the list items. + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; paragraphs.load("$none"); 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 54d5b3b8c..5c6bcb403 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -25,14 +25,14 @@ script: async function getSentences() { await Word.run(async (context) => { - // Gets the complete sentence (as range) associated with the insertion point. + // Get the complete sentence (as range) associated with the insertion point. const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); - // Expands the range to the end of the paragraph to get all the complete sentences. + // Expand the range to the end of the paragraph to get all the complete sentences. const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( diff --git a/samples/word/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 583c7d2e0..36ddd1817 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -12,7 +12,7 @@ script: $("#count").click(() => tryCatch(run)); async function run() { - // Count how many times each term appears in the document. + // Counts how many times each term appears in the document. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; paragraphs.load("text"); diff --git a/samples/word/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 3cf45e285..fd51c0c93 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -16,7 +16,7 @@ script: async function indent() { await Word.run(async (context) => { - // Indents the first paragraph. + // Indent the first paragraph. context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points return context.sync(); @@ -25,7 +25,7 @@ script: async function spacing() { await Word.run(async (context) => { - // Adjusts line spacing. + // Adjust line spacing. context.document.body.paragraphs.getFirst().lineSpacing = 20; await context.sync(); @@ -43,7 +43,7 @@ script: async function align() { await Word.run(async (context) => { - // Centers last paragraph alignment. + // Center last paragraph alignment. context.document.body.paragraphs.getLast().alignment = "Centered"; await context.sync(); diff --git a/samples/word/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index 9b7cfa30d..bfc17600e 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -13,7 +13,7 @@ script: $("#wildcard-search").click(() => tryCatch(wildcardSearch)); async function basicSearch() { - // Do a basic text search and highlight matches in the document. + // 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"); @@ -30,7 +30,7 @@ script: } async function wildcardSearch() { - // Do a wildcard search and highlight matches in the document. + // 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 }); diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml index 6c5e2ccb3..5b2f78808 100644 --- a/samples/word/35-ranges/compare-location.yaml +++ b/samples/word/35-ranges/compare-location.yaml @@ -12,7 +12,7 @@ script: $("#setup").click(() => tryCatch(setup)); async function compareLocations() { - // Compare the location of one paragraph in relation to another paragraph. + // Compares the location of one paragraph in relation to another paragraph. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; paragraphs.load("items"); diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index f45996924..d5b24abf5 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -20,7 +20,7 @@ script: $("#setup").click(() => tryCatch(insertTable)); async function getTableAlignment() { - // Get alignment details about the first table in the document. + // 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"]); @@ -34,7 +34,7 @@ script: } async function getTableBorder() { - // Get border details about the first table in the document. + // Gets border details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); const borderLocation = Word.BorderLocation.top; @@ -50,7 +50,7 @@ script: } async function getTableCellPadding() { - // Get cell padding details about the first table in the document. + // Gets cell padding details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); const cellPaddingLocation = Word.CellPaddingLocation.right; @@ -64,7 +64,7 @@ script: } async function getTableRowAlignment() { - // Get content alignment 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(); @@ -78,7 +78,7 @@ script: } async function getTableRowBorder() { - // Get border 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(); @@ -95,7 +95,7 @@ script: } async function getTableRowCellPadding() { - // Get cell padding details about the first row of the first table in the document. + // Gets cell padding 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(); @@ -110,7 +110,7 @@ script: } async function getTableCellAlignment() { - // Get content alignment details about the first cell of the first table in the document. + // Gets content alignment details about the first cell of the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); const firstCell = firstTable.getCell(0, 0); @@ -124,7 +124,7 @@ script: } async function getTableCellBorder() { - // Get border details about the first of the first table in the document. + // Gets border details about the first of the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); const firstCell = firstTable.getCell(0, 0); @@ -141,7 +141,7 @@ script: } async function getTableCellCellPadding() { - // Get cell padding details about the first cell of the first table in the document. + // Gets cell padding details about the first cell of the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); const firstCell = firstTable.getCell(0, 0); diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 8495a1ce0..5fa14907a 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -12,7 +12,7 @@ script: $("#setup").click(() => tryCatch(insertTable)); async function getTableCell() { - // Get the content of the first cell in the first table. + // 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"); diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index f0bf7b2cc..04d8ee21f 100644 --- a/samples/word/50-document/insert-external-document.yaml +++ b/samples/word/50-document/insert-external-document.yaml @@ -13,7 +13,7 @@ script: let externalDocument; async function insertDocument() { - // Update the text of the current document with the text from another document passed in as a Base64-encoded string. + // 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 = context.application.createDocument(externalDocument); diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index a4483d8eb..fea7222e8 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -13,7 +13,7 @@ script: $("#setup").click(() => tryCatch(setup)); async function getChangeTrackingMode() { - // Get the current change tracking mode. + // Gets the current change tracking mode. await Word.run(async (context) => { const document = context.document; document.load("changeTrackingMode"); @@ -30,7 +30,7 @@ script: } async function setChangeTrackingMode() { - // Set the change tracking mode. + // Sets the change tracking mode. await Word.run(async (context) => { const mode = $("input[name='mode']:checked").val(); if (mode === "Track only my changes") { @@ -48,7 +48,7 @@ script: } async function getReviewedText() { - // Get the reviewed text. + // Gets the reviewed text. await Word.run(async (context) => { const range = context.document.getSelection(); const before = range.getReviewedText(Word.ChangeTrackingVersion.original); diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index ebd3cbee2..021909e92 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -1,6 +1,6 @@ order: 4 id: word-document-manage-comments -name: Comments +name: Manage comments description: 'This sample shows how to perform basic comments operations, including insert, reply, get, edit, resolve, and delete.' host: WORD api_set: @@ -18,7 +18,7 @@ script: $("#setup").click(() => tryCatch(setup)); async function insertComment() { - // Set a comment on the selected content. + // Sets a comment on the selected content. await Word.run(async (context) => { const text = $("#comment-text") .val() @@ -35,7 +35,7 @@ script: } async function editFirstCommentInSelection() { - // Edit the first comment in the selected content. + // Edits the first comment in the selected content. await Word.run(async (context) => { const text = $("#edit-comment-text") .val() @@ -56,7 +56,7 @@ script: } async function replyToFirstActiveCommentInSelection() { - // Reply to the first active comment in the selected content. + // Replies to the first active comment in the selected content. await Word.run(async (context) => { const text = $("#reply-text") .val() @@ -75,7 +75,7 @@ script: } async function toggleResolvedStatusOfFirstCommentInSelection() { - // Toggle Resolved status of the first comment in the selected content. + // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { const comment = context.document .getSelection() @@ -98,7 +98,7 @@ script: } async function getFirstCommentRange() { - // Get the range of the first comment in the selected content. + // Gets the range of the first comment in the selected content. await Word.run(async (context) => { const range = context.document .getSelection() @@ -113,7 +113,7 @@ script: } async function getCommentsInSelection() { - // Get the comments in the selected content. + // Gets the comments in the selected content. await Word.run(async (context) => { const comments = context.document.getSelection().getComments(); @@ -127,7 +127,7 @@ script: } async function deleteFirstCommentInSelection() { - // Delete the first comment in the selected content. + // Deletes the first comment in the selected content. await Word.run(async (context) => { context.document .getSelection() @@ -141,7 +141,7 @@ script: } async function getComments() { - // Get the comments in the document body. + // Gets the comments in the document body. await Word.run(async (context) => { const comments = context.document.body.getComments(); 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 ff6cc8298..3a309aaba 100644 --- a/samples/word/50-document/manage-custom-xml-part-ns.yaml +++ b/samples/word/50-document/manage-custom-xml-part-ns.yaml @@ -16,7 +16,7 @@ script: $("#delete-custom-xml-part").click(() => tryCatch(deleteCustomXmlPart)); async function addCustomXmlPart() { - // Add a custom XML part. + // 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 = @@ -40,7 +40,7 @@ script: } async function query() { - // Query a custom XML part for elements matching the search terms. + // 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"); @@ -67,7 +67,7 @@ script: } async function getNamespace() { - // Get the namespace URI from 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"); @@ -88,7 +88,7 @@ script: } async function replace() { - // Replace a custom XML part. + // Replaces a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); @@ -120,7 +120,7 @@ script: } async function insertAttribute() { - // Insert an attribute into a custom XML part. + // 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"); @@ -149,7 +149,7 @@ script: } async function insertElement() { - // Insert an element into a custom XML part. + // 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"); @@ -178,7 +178,7 @@ script: } async function deleteCustomXmlPart() { - // Delete a custom XML part. + // Deletes a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartIdNS").load("value"); diff --git a/samples/word/50-document/manage-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 9aadb1a0e..602513686 100644 --- a/samples/word/50-document/manage-custom-xml-part.yaml +++ b/samples/word/50-document/manage-custom-xml-part.yaml @@ -14,7 +14,7 @@ script: $("#delete-custom-xml-part").click(() => tryCatch(deleteCustomXmlPart)); async function addCustomXmlPart() { - // Add a custom XML part. + // Adds a custom XML part. await Word.run(async (context) => { const originalXml = "JuanHongSally"; @@ -37,7 +37,7 @@ script: } async function query() { - // Query a custom XML part for elements matching the search terms. + // 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("ContosoReviewXmlPartId").load("value"); @@ -64,7 +64,7 @@ script: } async function insertAttribute() { - // Insert an attribute into a custom XML part. + // Inserts an attribute into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -88,7 +88,7 @@ script: } async function insertElement() { - // Insert an element into a custom XML part. + // Inserts an element into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); @@ -117,7 +117,7 @@ script: } async function deleteCustomXmlPart() { - // Delete a custom XML part. + // Deletes a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; const xmlPartIDSetting = settings.getItemOrNullObject("ContosoReviewXmlPartId").load("value"); diff --git a/samples/word/50-document/manage-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 4ea56503d..c08f96f74 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -19,7 +19,7 @@ script: $("#setup").click(() => tryCatch(setup)); async function insertFootnote() { - // Set a footnote on the selected content. + // Sets a footnote on the selected content. await Word.run(async (context) => { const text = $("#input-footnote") .val() @@ -31,7 +31,7 @@ script: }); } async function getReference() { - // Select the footnote's reference mark in the document body. + // Selects the footnote's reference mark in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/reference"); @@ -48,7 +48,7 @@ script: }); } async function getFootnoteType() { - // Get the referenced note's item type and body type, which are both "Footnote". + // Gets the referenced note's item type and body type, which are both "Footnote". await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items"); @@ -66,7 +66,7 @@ script: }); } async function getFootnoteBody() { - // Get the text of the referenced footnote. + // Gets the text of the referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/body"); @@ -82,7 +82,7 @@ script: }); } async function getNextFootnote() { - // Select the next footnote in the document body. + // Selects the next footnote in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items/reference"); @@ -96,7 +96,7 @@ script: }); } async function deleteFootnote() { - // Delete this referenced footnote. + // Deletes this referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("items"); @@ -111,7 +111,7 @@ script: }); } async function getFirstFootnote() { - // Get the first footnote in the document body and select its reference mark. + // Gets the first footnote in the document body and select its reference mark. await Word.run(async (context) => { const reference = context.document.body.footnotes.getFirst().reference; reference.select(); @@ -119,7 +119,7 @@ script: }); } async function getFootnotesFromBody() { - // Get the footnotes in the document body. + // Gets the footnotes in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; footnotes.load("length"); @@ -129,7 +129,7 @@ script: }); } async function getFootnotesFromRange() { - // Get the footnotes in the selected document range. + // Gets the footnotes in the selected document range. await Word.run(async (context) => { const footnotes = context.document.getSelection().footnotes; footnotes.load("length"); diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index 9b67623ef..effefb824 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -12,7 +12,7 @@ script: $("#delete-all-settings").click(() => tryCatch(deleteAllSettings)); async function addEditSetting() { - // Add a new custom setting, or edit the value of an existing one. + // Adds a new custom setting, or edit the value of an existing one. await Word.run(async (context) => { const key = $("#key") .val() @@ -38,7 +38,7 @@ script: } async function getAllSettings() { - // Get all custom settings this add-in set on this document. + // Gets all custom settings this add-in set on this document. await Word.run(async (context) => { const settings = context.document.settings; settings.load("items"); @@ -56,7 +56,7 @@ script: } async function deleteAllSettings() { - // Delete all custom settings this add-in had set on this document. + // Deletes all custom settings this add-in had set on this document. await Word.run(async (context) => { const settings = context.document.settings; settings.deleteAll(); diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index e9f4cee7e..603c135f8 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -56,11 +56,11 @@ script: }); } - // Simulates creation of a template. First searches the document for instances of the string "Contractor", - // then changes the format of each search result, - // then wraps each search result within a content control, - // finally sets a tag and title property on each content control. async function addContentControls() { + // Simulates creation of a template. First searches the document for instances of the string "Contractor", + // then changes the format of each search result, + // then wraps each search result within a content control, + // finally sets a tag and title property on each content control. await Word.run(async (context) => { const results = context.document.body.search("Contractor"); results.load("font/bold"); 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 9bbd8a317..528647ac8 100644 --- a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml +++ b/samples/word/99-preview-apis/content-control-ondeleted-event.yaml @@ -1,6 +1,6 @@ id: word-content-control-ondeleted-event name: Delete content controls -description: 'Register, trigger, and deregister 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/99-preview-apis/insert-and-get-pictures.yaml b/samples/word/99-preview-apis/insert-and-get-pictures.yaml index 680108c08..4d2a75b8e 100644 --- a/samples/word/99-preview-apis/insert-and-get-pictures.yaml +++ b/samples/word/99-preview-apis/insert-and-get-pictures.yaml @@ -24,7 +24,7 @@ script: } async function getImage() { - // Get the first image in the document. + // Gets the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); firstPicture.load("width, height, imageFormat"); @@ -41,7 +41,7 @@ script: } async function setup() { - // Setup by adding a dummy paragraph. + // Sets up by adding a dummy paragraph. await Word.run(async (context) => { const body = context.document.body; body.clear(); diff --git a/samples/word/99-preview-apis/insert-formatted-text.yaml b/samples/word/99-preview-apis/insert-formatted-text.yaml index 483b19fdd..c3eab96de 100644 --- a/samples/word/99-preview-apis/insert-formatted-text.yaml +++ b/samples/word/99-preview-apis/insert-formatted-text.yaml @@ -8,6 +8,7 @@ api_set: script: content: |- $("#add-preset").click(() => tryCatch(addPreStyledFormattedText)); + async function addPreStyledFormattedText() { await Word.run(async (context) => { const sentence = context.document.body.insertParagraph( diff --git a/samples/word/default.yaml b/samples/word/default.yaml index 19d5ecb66..27169b905 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -1,6 +1,6 @@ id: word-word-default name: Blank snippet -description: Create a new snippet from a blank template. +description: Creates a new snippet from a blank template. author: OfficeDev host: WORD api_set: diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index c97ea9613..36fca96eb 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -13705,7 +13705,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml - // Update the text of the current document with the text from another + // 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) => { @@ -13728,7 +13728,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Get the comments in the document body. + // Gets the comments in the document body. await Word.run(async (context) => { const comments = context.document.body.getComments(); @@ -13783,7 +13783,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml - // Do a basic text search and highlight matches in the document. + // Does a basic text search and highlights matches in the document. await Word.run(async (context) => { const results = context.document.body.search("Online"); @@ -13802,7 +13802,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/search.yaml - // Do a wildcard search and highlight matches in the document. + // 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. @@ -13848,7 +13848,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the footnotes in the document body. + // Gets the footnotes in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -13862,7 +13862,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - // Get the first image in the document. + // Gets the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); @@ -13881,7 +13881,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-word-count.yaml - // Count how many times each term appears in the document. + // Counts how many times each term appears in the document. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; @@ -13934,7 +13934,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml - // Get the content of the first cell in the first table. + // 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; @@ -13948,7 +13948,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the referenced note's item type and body type, which are both + // Gets the referenced note's item type and body type, which are both "Footnote". await Word.run(async (context) => { @@ -13971,7 +13971,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the referenced note's item type and body type, which are both + // Gets the referenced note's item type and body type, which are both "Footnote". await Word.run(async (context) => { @@ -13994,7 +13994,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first table in the document. + // Gets border details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -14013,7 +14013,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first of the first table in the document. + // Gets border details about the first of the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -14060,7 +14060,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get cell padding details about the first table in the document. + // Gets cell padding details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -14077,7 +14077,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml - // Get the current change tracking mode. + // Gets the current change tracking mode. await Word.run(async (context) => { const document = context.document; @@ -14097,7 +14097,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml - // Get the reviewed text. + // Gets the reviewed text. await Word.run(async (context) => { const range = context.document.getSelection(); @@ -14114,7 +14114,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Delete the first comment in the selected content. + // Deletes the first comment in the selected content. await Word.run(async (context) => { context.document @@ -14131,7 +14131,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Get the range of the first comment in the selected content. + // Gets the range of the first comment in the selected content. await Word.run(async (context) => { const range = context.document @@ -14149,7 +14149,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Reply to the first active comment in the selected content. + // Replies to the first active comment in the selected content. await Word.run(async (context) => { const text = $("#reply-text") @@ -14171,7 +14171,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Edit the first comment in the selected content. + // Edits the first comment in the selected content. await Word.run(async (context) => { const text = $("#edit-comment-text") @@ -14195,7 +14195,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Toggle Resolved status of the first comment in the selected content. + // Toggles Resolved status of the first comment in the selected content. await Word.run(async (context) => { const comment = context.document @@ -14221,7 +14221,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Get the range of the first comment in the selected content. + // Gets the range of the first comment in the selected content. await Word.run(async (context) => { const range = context.document @@ -14239,7 +14239,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Reply to the first active comment in the selected content. + // Replies to the first active comment in the selected content. await Word.run(async (context) => { const text = $("#reply-text") @@ -14284,7 +14284,7 @@ appearance. await Word.run(async (context) => { - // Gets the complete sentence (as range) associated with the insertion point. + // 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"); @@ -14384,7 +14384,7 @@ appearance. await Word.run(async (context) => { - // Gets the complete sentence (as range) associated with the insertion point. + // 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"); @@ -14505,7 +14505,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Delete a custom XML part. + // Deletes a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -14541,7 +14541,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Add a custom XML part. + // Adds a custom XML part. await Word.run(async (context) => { const originalXml = @@ -14567,7 +14567,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Insert an attribute into a custom XML part. + // Inserts an attribute into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -14594,7 +14594,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Insert an element into a custom XML part. + // Inserts an element into a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -14626,7 +14626,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Query a custom XML part for elements matching the search terms. + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { const settings = context.document.settings; @@ -14656,7 +14656,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml - // Replace a custom XML part. + // Replaces a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -14691,7 +14691,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Add a custom XML part. + // Adds a custom XML part. await Word.run(async (context) => { const originalXml = @@ -14717,7 +14717,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part-ns.yaml - // Get the namespace URI from a custom XML part. + // Gets the namespace URI from a custom XML part. await Word.run(async (context) => { const settings = context.document.settings; @@ -14741,7 +14741,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Add a custom XML part. + // Adds a custom XML part. await Word.run(async (context) => { const originalXml = @@ -14767,7 +14767,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-custom-xml-part.yaml - // Query a custom XML part for elements matching the search terms. + // Queries a custom XML part for elements matching the search terms. await Word.run(async (context) => { const settings = context.document.settings; @@ -14797,7 +14797,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml - // Get the current change tracking mode. + // Gets the current change tracking mode. await Word.run(async (context) => { const document = context.document; @@ -14829,7 +14829,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml - // Get all custom settings this add-in set on this document. + // Gets all custom settings this add-in set on this document. await Word.run(async (context) => { const settings = context.document.settings; @@ -14850,7 +14850,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/insert-external-document.yaml - // Update the text of the current document with the text from another + // 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) => { @@ -15014,7 +15014,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml - // Get the first image in the document. + // Gets the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); @@ -15049,7 +15049,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - // Get the first image in the document. + // Gets the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); @@ -15068,7 +15068,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-and-get-pictures.yaml - // Get the first image in the document. + // Gets the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); @@ -15088,7 +15088,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/15-images/insert-and-get-pictures.yaml - // Get the first image in the document. + // Gets the first image in the document. await Word.run(async (context) => { const firstPicture = context.document.body.inlinePictures.getFirst(); @@ -15140,7 +15140,7 @@ 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"); - // Sets up list level for the list item. + // Set up list level for the list item. paragraph.listItem.level = 4; // To add paragraphs outside the list, use Before or After. @@ -15171,7 +15171,7 @@ 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"); - // Sets up list level for the list item. + // Set up list level for the list item. paragraph.listItem.level = 4; // To add paragraphs outside the list, use Before or After. @@ -15184,7 +15184,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Insert a list starting with the first paragraph then set numbering and + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. await Word.run(async (context) => { @@ -15227,7 +15227,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Insert a list starting with the first paragraph then set numbering and + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. await Word.run(async (context) => { @@ -15270,7 +15270,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Insert a list starting with the first paragraph then set numbering and + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. await Word.run(async (context) => { @@ -15331,7 +15331,7 @@ 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"); - // Sets up list level for the list item. + // Set up list level for the list item. paragraph.listItem.level = 4; // To add paragraphs outside the list, use Before or After. @@ -15344,7 +15344,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Insert a list starting with the first paragraph then set numbering and + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. await Word.run(async (context) => { @@ -15387,7 +15387,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Insert a list starting with the first paragraph then set numbering and + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. await Word.run(async (context) => { @@ -15430,7 +15430,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/20-lists/organize-list.yaml - // Insert a list starting with the first paragraph then set numbering and + // Inserts a list starting with the first paragraph then set numbering and bullet types of the list items. await Word.run(async (context) => { @@ -15473,7 +15473,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml - // Compare the location of one paragraph in relation to another paragraph. + // Compares the location of one paragraph in relation to another paragraph. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; @@ -15495,7 +15495,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Delete this referenced footnote. + // Deletes this referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -15514,7 +15514,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Select the next footnote in the document body. + // Selects the next footnote in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -15532,7 +15532,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the text of the referenced footnote. + // Gets the text of the referenced footnote. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -15552,7 +15552,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Select the footnote's reference mark in the document body. + // Selects the footnote's reference mark in the document body. await Word.run(async (context) => { const footnotes = context.document.body.footnotes; @@ -15573,7 +15573,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the referenced note's item type and body type, which are both + // Gets the referenced note's item type and body type, which are both "Footnote". await Word.run(async (context) => { @@ -15596,7 +15596,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the first footnote in the document body and select its reference + // Gets the first footnote in the document body and select its reference mark. await Word.run(async (context) => { @@ -15609,7 +15609,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the referenced note's item type and body type, which are both + // Gets the referenced note's item type and body type, which are both "Footnote". await Word.run(async (context) => { @@ -15633,14 +15633,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml await Word.run(async (context) => { - // Gets the complete sentence (as range) associated with the insertion point. + // Get the complete sentence (as range) associated with the insertion point. const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); - // Expands the range to the end of the paragraph to get all the complete sentences. + // Expand the range to the end of the paragraph to get all the complete sentences. const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( @@ -15747,7 +15747,7 @@ 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"); - // Sets up list level for the list item. + // Set up list level for the list item. paragraph.listItem.level = 4; // To add paragraphs outside the list, use Before or After. @@ -15793,7 +15793,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { - // Centers last paragraph alignment. + // Center last paragraph alignment. context.document.body.paragraphs.getLast().alignment = "Centered"; await context.sync(); @@ -15804,7 +15804,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { - // Indents the first paragraph. + // Indent the first paragraph. context.document.body.paragraphs.getFirst().leftIndent = 75; //units = points return context.sync(); @@ -15815,7 +15815,7 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/paragraph-properties.yaml await Word.run(async (context) => { - // Adjusts line spacing. + // Adjust line spacing. context.document.body.paragraphs.getFirst().lineSpacing = 20; await context.sync(); @@ -15882,7 +15882,7 @@ 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"); - // Sets up list level for the list item. + // Set up list level for the list item. paragraph.listItem.level = 4; // To add paragraphs outside the list, use Before or After. @@ -15895,7 +15895,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/35-ranges/compare-location.yaml - // Compare the location of one paragraph in relation to another paragraph. + // Compares the location of one paragraph in relation to another paragraph. await Word.run(async (context) => { const paragraphs = context.document.body.paragraphs; @@ -15917,7 +15917,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Get the comments in the selected content. + // Gets the comments in the selected content. await Word.run(async (context) => { const comments = context.document.getSelection().getComments(); @@ -15934,7 +15934,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-change-tracking.yaml - // Get the reviewed text. + // Gets the reviewed text. await Word.run(async (context) => { const range = context.document.getSelection(); @@ -15952,14 +15952,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml await Word.run(async (context) => { - // Gets the complete sentence (as range) associated with the insertion point. + // Get the complete sentence (as range) associated with the insertion point. const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); - // Expands the range to the end of the paragraph to get all the complete sentences. + // Expand the range to the end of the paragraph to get all the complete sentences. const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( @@ -15981,7 +15981,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-comments.yaml - // Set a comment on the selected content. + // Sets a comment on the selected content. await Word.run(async (context) => { const text = $("#comment-text") @@ -16001,6 +16001,15 @@ // 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", + + // then changes the format of each search result, + + // then wraps each search result within a content control, + + // finally sets a tag and title property on each content control. + await Word.run(async (context) => { const results = context.document.body.search("Contractor"); results.load("font/bold"); @@ -16025,7 +16034,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Set a footnote on the selected content. + // Sets a footnote on the selected content. await Word.run(async (context) => { const text = $("#input-footnote") @@ -16041,7 +16050,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-footnotes.yaml - // Get the footnotes in the selected document range. + // Gets the footnotes in the selected document range. await Word.run(async (context) => { const footnotes = context.document.getSelection().footnotes; @@ -16056,14 +16065,14 @@ https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml await Word.run(async (context) => { - // Gets the complete sentence (as range) associated with the insertion point. + // Get the complete sentence (as range) associated with the insertion point. const sentences = context.document .getSelection() .getTextRanges(["."] /* Using the "." as delimiter */, false /*means without trimming spaces*/); sentences.load("$none"); await context.sync(); - // Expands the range to the end of the paragraph to get all the complete sentences. + // Expand the range to the end of the paragraph to get all the complete sentences. const sentencesToTheEndOfParagraph = sentences.items[0] .getRange() .expandTo( @@ -16152,7 +16161,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml - // Delete all custom settings this add-in had set on this document. + // Deletes all custom settings this add-in had set on this document. await Word.run(async (context) => { const settings = context.document.settings; @@ -16165,7 +16174,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml - // Add a new custom setting, or edit the value of an existing one. + // Adds a new custom setting, or edit the value of an existing one. await Word.run(async (context) => { const key = $("#key") @@ -16194,7 +16203,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml - // Get all custom settings this add-in set on this document. + // Gets all custom settings this add-in set on this document. await Word.run(async (context) => { const settings = context.document.settings; @@ -16248,7 +16257,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first table in the document. + // Gets border details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16267,7 +16276,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml - // Get the content of the first cell in the first table. + // 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; @@ -16281,7 +16290,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get cell padding details about the first table in the document. + // Gets cell padding details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16298,7 +16307,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get alignment details about the first table in the document. + // Gets alignment details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16315,7 +16324,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get alignment details about the first table in the document. + // Gets alignment details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16332,7 +16341,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get content alignment details about the first row of the first table in + // Gets content alignment details about the first row of the first table in the document. await Word.run(async (context) => { @@ -16350,7 +16359,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get alignment details about the first table in the document. + // Gets alignment details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16367,7 +16376,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first table in the document. + // Gets border details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16386,7 +16395,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first table in the document. + // Gets border details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16405,7 +16414,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first table in the document. + // Gets border details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16424,7 +16433,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml - // Get the content of the first cell in the first table. + // 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; @@ -16438,7 +16447,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first of the first table in the document. + // Gets border details about the first of the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16458,7 +16467,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get cell padding details about the first cell of the first table in the + // Gets cell padding details about the first cell of the first table in the document. await Word.run(async (context) => { @@ -16477,7 +16486,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get content alignment details about the first cell of the first table in + // Gets content alignment details about the first cell of the first table in the document. await Word.run(async (context) => { @@ -16495,7 +16504,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get content alignment details about the first cell of the first table in + // Gets content alignment details about the first cell of the first table in the document. await Word.run(async (context) => { @@ -16513,7 +16522,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get alignment details about the first table in the document. + // Gets alignment details about the first table in the document. await Word.run(async (context) => { const firstTable = context.document.body.tables.getFirst(); @@ -16530,7 +16539,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/table-cell-access.yaml - // Get the content of the first cell in the first table. + // 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; @@ -16544,7 +16553,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first row of the first table in the + // Gets border details about the first row of the first table in the document. await Word.run(async (context) => { @@ -16565,7 +16574,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get cell padding details about the first row of the first table in the + // Gets cell padding details about the first row of the first table in the document. await Word.run(async (context) => { @@ -16584,7 +16593,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get content alignment details about the first row of the first table in + // Gets content alignment details about the first row of the first table in the document. await Word.run(async (context) => { @@ -16602,7 +16611,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get border details about the first row of the first table in the + // Gets border details about the first row of the first table in the document. await Word.run(async (context) => { @@ -16623,7 +16632,7 @@ // Link to full sample: https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-formatting.yaml - // Get content alignment details about the first row of the first table in + // Gets content alignment details about the first row of the first table in the document. await Word.run(async (context) => { From ad3213817744134fee9c80035f12cac9cdcc0d0a Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 18 May 2023 13:07:46 -0700 Subject: [PATCH 162/336] [Word] (1.5) Updates (#778) * [Word] (1.5) Updates * Fix mapping * Move ContentControl.onDeleted snippet out of preview * Added snippets for other content control events * Added snippets for style and save-close * Update styles sample * Update fields snippet * Update preview fields snippet reqt. set * Updates based on feedback * Update based on feedback * Updates based on feedback * Update handling of multiple IDs * Cleanup --- playlists-prod/word.yaml | 116 +- playlists/word.yaml | 114 +- .../content-control-onadded-event.yaml | 145 +++ .../content-control-ondatachanged-event.yaml | 163 +++ .../content-control-ondeleted-event.yaml | 17 +- .../content-control-onentered-event.yaml | 162 +++ .../content-control-onexited-event.yaml | 163 +++ ...tent-control-onselectionchanged-event.yaml | 162 +++ .../25-paragraph/insert-formatted-text.yaml | 2 +- samples/word/40-tables/manage-formatting.yaml | 2 +- samples/word/40-tables/table-cell-access.yaml | 2 +- samples/word/50-document/manage-fields.yaml | 229 +++- samples/word/50-document/manage-settings.yaml | 3 +- samples/word/50-document/manage-styles.yaml | 324 +++++ samples/word/50-document/save-close.yaml | 146 +++ samples/word/90-scenarios/doc-assembly.yaml | 20 +- .../insert-formatted-text.yaml | 73 -- snippet-extractor-metadata/word.xlsx | Bin 18177 -> 20008 bytes snippet-extractor-output/snippets.yaml | 1081 +++++++++++++++-- view-prod/word.json | 12 +- view/word.json | 12 +- 21 files changed, 2687 insertions(+), 261 deletions(-) create mode 100644 samples/word/10-content-controls/content-control-onadded-event.yaml create mode 100644 samples/word/10-content-controls/content-control-ondatachanged-event.yaml rename samples/word/{99-preview-apis => 10-content-controls}/content-control-ondeleted-event.yaml (93%) create mode 100644 samples/word/10-content-controls/content-control-onentered-event.yaml create mode 100644 samples/word/10-content-controls/content-control-onexited-event.yaml create mode 100644 samples/word/10-content-controls/content-control-onselectionchanged-event.yaml create mode 100644 samples/word/50-document/manage-styles.yaml create mode 100644 samples/word/50-document/save-close.yaml delete mode 100644 samples/word/99-preview-apis/insert-formatted-text.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index f64dfe691..7e06a63fd 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -36,6 +36,72 @@ group: Content Controls api_set: WordApi: '1.1' +- id: word-content-controls-content-control-onadded-event + name: On adding content controls + fileName: content-control-onadded-event.yaml + description: >- + Registers, triggers, and deregisters onAdded event that tracks the addition + of content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-onentered-event + name: On entering content controls + fileName: content-control-onentered-event.yaml + description: >- + Registers, triggers, and deregisters onEntered event that tracks when the + cursor is placed within content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-onselectionchanged-event + name: On changing selection in content controls + fileName: content-control-onselectionchanged-event.yaml + description: >- + Registers, triggers, and deregisters onSelectionChanged event that tracks + when selections are changed in content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-ondatachanged-event + name: On changing data in content controls + fileName: content-control-ondatachanged-event.yaml + description: >- + Registers, triggers, and deregisters onDataChanged event that tracks when + data is changed in content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondatachanged-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-onexited-event + name: On exiting content controls + fileName: content-control-onexited-event.yaml + description: >- + Registers, triggers, and deregisters onExited event that tracks when the + cursor is removed from within content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onexited-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-ondeleted-event + name: On deleting content controls + fileName: content-control-ondeleted-event.yaml + description: >- + Registers, triggers, and deregisters onDeleted event that tracks the removal + of content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' - id: word-images-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml @@ -254,14 +320,16 @@ api_set: WordApi: '1.4' - id: word-document-manage-fields - name: Get fields + name: Manage fields fileName: manage-fields.yaml - description: This sample shows how to get existing fields. + description: >- + This sample shows how to perform basic operations on fields, including + insert, get, and delete. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-fields.yaml group: Document api_set: - WordApi: '1.4' + WordApi: '1.5' - id: word-document-manage-settings name: Manage settings fileName: manage-settings.yaml @@ -295,6 +363,26 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-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/50-document/manage-styles.yaml + group: Document + api_set: + WordApi: '1.5' +- id: word-document-save-close + name: Manage document save and close + fileName: save-close.yaml + description: Shows how to manage saving and closing document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.yaml + group: Document + api_set: + WordApi: '1.5' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -313,17 +401,6 @@ group: Scenarios api_set: WordApi: '1.3' -- id: word-content-control-ondeleted-event - name: Delete content controls - fileName: content-control-ondeleted-event.yaml - description: >- - Registers, triggers, and deregisters onDeleted event that tracks the removal - of content controls. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml - group: Preview APIs - api_set: - WordApi: '1.5' - id: word-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml @@ -332,13 +409,4 @@ 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' -- id: word-insert-formatted-text - name: Insert formatted text - fileName: insert-formatted-text.yaml - description: Formats text with pre-built styles. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-formatted-text.yaml - group: Preview APIs - api_set: - WordApi: '1.5' \ No newline at end of file + WordApi: '1.1' \ No newline at end of file diff --git a/playlists/word.yaml b/playlists/word.yaml index 41210be6e..da4f1f61a 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -36,6 +36,72 @@ group: Content Controls api_set: WordApi: '1.1' +- id: word-content-controls-content-control-onadded-event + name: On adding content controls + fileName: content-control-onadded-event.yaml + description: >- + Registers, triggers, and deregisters onAdded event that tracks the addition + of content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onadded-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-onentered-event + name: On entering content controls + fileName: content-control-onentered-event.yaml + description: >- + Registers, triggers, and deregisters onEntered event that tracks when the + cursor is placed within content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onentered-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-onselectionchanged-event + name: On changing selection in content controls + fileName: content-control-onselectionchanged-event.yaml + description: >- + Registers, triggers, and deregisters onSelectionChanged event that tracks + when selections are changed in content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-ondatachanged-event + name: On changing data in content controls + fileName: content-control-ondatachanged-event.yaml + description: >- + Registers, triggers, and deregisters onDataChanged event that tracks when + data is changed in content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-ondatachanged-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-onexited-event + name: On exiting content controls + fileName: content-control-onexited-event.yaml + description: >- + Registers, triggers, and deregisters onExited event that tracks when the + cursor is removed from within content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onexited-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' +- id: word-content-controls-content-control-ondeleted-event + name: On deleting content controls + fileName: content-control-ondeleted-event.yaml + description: >- + Registers, triggers, and deregisters onDeleted event that tracks the removal + of content controls. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-ondeleted-event.yaml + group: Content Controls + api_set: + WordApi: '1.5' - id: word-images-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml @@ -254,14 +320,16 @@ api_set: WordApi: '1.4' - id: word-document-manage-fields - name: Get fields + name: Manage fields fileName: manage-fields.yaml - description: This sample shows how to get existing fields. + description: >- + This sample shows how to perform basic operations on fields, including + insert, get, and delete. rawUrl: >- https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-fields.yaml group: Document api_set: - WordApi: '1.4' + WordApi: '1.5' - id: word-document-manage-settings name: Manage settings fileName: manage-settings.yaml @@ -295,6 +363,26 @@ group: Document api_set: WordApi: '1.4' +- id: word-document-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/50-document/manage-styles.yaml + group: Document + api_set: + WordApi: '1.5' +- id: word-document-save-close + name: Manage document save and close + fileName: save-close.yaml + description: Shows how to manage saving and closing document. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.yaml + group: Document + api_set: + WordApi: '1.5' - id: word-scenarios-doc-assembly name: Document assembly fileName: doc-assembly.yaml @@ -313,17 +401,6 @@ group: Scenarios api_set: WordApi: '1.3' -- id: word-content-control-ondeleted-event - name: Delete content controls - fileName: content-control-ondeleted-event.yaml - description: >- - Registers, triggers, and deregisters onDeleted event that tracks the removal - of content controls. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.yaml - group: Preview APIs - api_set: - WordApi: '1.5' - id: word-insert-and-get-pictures name: Use inline pictures fileName: insert-and-get-pictures.yaml @@ -333,12 +410,3 @@ group: Preview APIs api_set: WordApi: '1.1' -- id: word-insert-formatted-text - name: Insert formatted text - fileName: insert-formatted-text.yaml - description: Formats text with pre-built styles. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-formatted-text.yaml - group: Preview APIs - api_set: - WordApi: '1.5' diff --git a/samples/word/10-content-controls/content-control-onadded-event.yaml b/samples/word/10-content-controls/content-control-onadded-event.yaml new file mode 100644 index 000000000..06949bb01 --- /dev/null +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -0,0 +1,145 @@ +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.' +host: WORD +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)); + + let eventContext; + + async function registerEventHandler() { + // 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."); + }); + } + + 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); + }); + } + + async function insertContentControls() { + // Traverses each paragraph of the document and wraps a content control on each. + await Word.run(async (context) => { + const 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(); + contentControl.tag = "forTesting"; + } + + console.log("Content controls inserted: " + paragraphs.items.length); + + 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 content controls are added."); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph. ", "Start"); + body.insertParagraph("Inserting another paragraph. ", "Start"); + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different 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 demonstrates how to use the onAdded event with content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ Register event handler. + + Insert content controls. + + Remove event handler. + +
+ 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/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml new file mode 100644 index 000000000..57d539c5b --- /dev/null +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -0,0 +1,163 @@ +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.' +host: WORD +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)); + + let eventContexts = []; + + async function insertContentControls() { + // Traverses each paragraph of the document and wraps a content control on each. + await Word.run(async (context) => { + const 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(); + contentControl.tag = "forTesting"; + } + + console.log("Content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); + } + + async function registerEventHandlers() { + 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."); + } + }); + } + + 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); + }); + } + + async function deregisterEventHandlers() { + 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 = null; + console.log("Removed event handlers that were tracking when data is changed in content controls."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph. ", "Start"); + body.insertParagraph("Inserting another paragraph. ", "Start"); + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different 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 demonstrates how to use the onDataChanged event on content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ 1. Insert content controls. + + 2. Register event handlers. + +

3. Within a content control, make a change in the text.

+ 4. Remove 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/99-preview-apis/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml similarity index 93% rename from samples/word/99-preview-apis/content-control-ondeleted-event.yaml rename to samples/word/10-content-controls/content-control-ondeleted-event.yaml index 528647ac8..012e1cfaf 100644 --- a/samples/word/99-preview-apis/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -1,5 +1,6 @@ -id: word-content-control-ondeleted-event -name: Delete content controls +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.' host: WORD api_set: @@ -55,10 +56,10 @@ script: }); } - async function contentControlDeleted(event: Word.ContentControlEventArgs) { + async function contentControlDeleted(event: Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { - // Display the deleted content control's ID. - console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`); + console.log(event.ids); }); } @@ -90,7 +91,7 @@ script: await context.sync(); eventContexts = null; - console.log("Removed event handlers for when content controls are deleted."); + console.log("Removed event handlers that were tracking when content controls are deleted."); }); } @@ -170,8 +171,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/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml new file mode 100644 index 000000000..dbc4bef0a --- /dev/null +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -0,0 +1,162 @@ +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.' +host: WORD +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)); + + let eventContexts = []; + + async function insertContentControls() { + // Traverses each paragraph of the document and wraps a content control on each. + await Word.run(async (context) => { + const 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(); + contentControl.tag = "forTesting"; + } + + console.log("Content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); + } + + async function registerEventHandlers() { + 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."); + } + }); + } + + 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]}`); + }); + } + + async function deregisterEventHandlers() { + 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 = null; + console.log("Removed event handlers that were tracking when the cursor is placed in content controls."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph. ", "Start"); + body.insertParagraph("Inserting another paragraph. ", "Start"); + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different 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 demonstrates how to use the onEntered event on content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ 1. Insert content controls. + + 2. Register event handlers. + +

3. Place the cursor in a content control.

+ 4. Remove 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/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml new file mode 100644 index 000000000..6e4908277 --- /dev/null +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -0,0 +1,163 @@ +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.' +host: WORD +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)); + + let eventContexts = []; + + async function insertContentControls() { + // Traverses each paragraph of the document and wraps a content control on each. + await Word.run(async (context) => { + const 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(); + contentControl.tag = "forTesting"; + } + + console.log("Content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); + } + + async function registerEventHandlers() { + 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."); + } + }); + } + + 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]}`); + }); + } + + async function deregisterEventHandlers() { + 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 = null; + console.log("Removed event handlers that were tracking when the cursor is removed from within content controls."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph. ", "Start"); + body.insertParagraph("Inserting another paragraph. ", "Start"); + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different 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 demonstrates how to use the onExited event on content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ 1. Insert content controls. + + 2. Register event handlers. + +

3. Place cursor within a content control.

+

4. Place cursor in location outside of that content control.

+ 5. Remove 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/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml new file mode 100644 index 000000000..51cbea505 --- /dev/null +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -0,0 +1,162 @@ +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.' +host: WORD +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)); + + let eventContexts = []; + + async function insertContentControls() { + // Traverses each paragraph of the document and wraps a content control on each. + await Word.run(async (context) => { + const 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(); + contentControl.tag = "forTesting"; + } + + console.log("Content controls inserted: " + paragraphs.items.length); + + await context.sync(); + }); + } + + async function registerEventHandlers() { + 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."); + } + }); + } + + 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); + }); + } + + async function deregisterEventHandlers() { + 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 = null; + console.log("Removed event handlers that were tracking when selection is changed in content controls."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body = context.document.body; + body.clear(); + body.insertParagraph("One more paragraph. ", "Start"); + body.insertParagraph("Inserting another paragraph. ", "Start"); + 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 cover page, header, and sidebar. Click Insert and then choose the elements you want from the different 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 demonstrates how to use the onSelectionChanged event on content controls. +
+ +
+

Set up

+ +
+ +
+

Try it out

+ 1. Insert content controls. + + 2. Register event handlers. + +

3. Select text within a content control.

+ 4. Remove 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/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 09644894a..49dc12016 100644 --- a/samples/word/25-paragraph/insert-formatted-text.yaml +++ b/samples/word/25-paragraph/insert-formatted-text.yaml @@ -58,7 +58,7 @@ script: ); // 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; + sentence.styleBuiltIn = Word.BuiltInStyleName.intenseReference; await context.sync(); }); diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index d5b24abf5..eff2be977 100644 --- a/samples/word/40-tables/manage-formatting.yaml +++ b/samples/word/40-tables/manage-formatting.yaml @@ -163,7 +163,7 @@ script: ["Apple", "Orange", "Pineapple"] ]; const table = context.document.body.insertTable(2, 3, "Start", data); - table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; table.styleFirstColumn = false; await context.sync(); diff --git a/samples/word/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 5fa14907a..1f4e33a49 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -30,7 +30,7 @@ script: ["Apple", "Orange", "Pineapple"] ]; const table = context.document.body.insertTable(2, 3, "Start", data); - table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; table.styleFirstColumn = false; await context.sync(); diff --git a/samples/word/50-document/manage-fields.yaml b/samples/word/50-document/manage-fields.yaml index 894a1f65f..b3ec9f956 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -1,30 +1,76 @@ order: 6 id: word-document-manage-fields -name: Get fields -description: This sample shows how to get existing fields. +name: Manage fields +description: 'This sample shows how to perform basic operations on fields, including insert, get, and delete.' host: WORD api_set: - WordApi: '1.4' + WordApi: '1.5' 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)); + async function rangeInsertDateField() { + // Inserts a Date field before selection. + await Word.run(async (context) => { + var range = context.document.getSelection().getRange(); + + const field = range.insertField(Word.InsertLocation.before, Word.FieldType.date, '\\@ "M/d/yyyy h:mm am/pm"', true); + + 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 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 body. + // Gets the first field in the document. await Word.run(async (context) => { const field = context.document.body.fields.getFirstOrNullObject(); - field.load(["code", "result"]); + field.load(["code", "result", "locked", "type", "data", "kind"]); await context.sync(); if (field.isNullObject) { - console.log("There are no fields in this document."); + 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); } }); } @@ -67,6 +113,107 @@ 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(); + 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)); + } + }); + } + + 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) => { + 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."); + } else { + console.log(`The first field in the selection is currently ${field.locked ? "locked" : "unlocked"}.`); + field.locked = !field.locked; + await context.sync(); + + console.log(`The first field in the selection is now ${field.locked ? "locked" : "unlocked"}.`); + } + }); + } + + async function deleteFirstField() { + // Deletes 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."); + } + }); + } + async function setup() { await Word.run(async (context) => { const body = context.document.body; @@ -91,10 +238,10 @@ script: template: content: |-
-

This sample demonstrates how to get fields, which are placeholders for dynamic data in your document. To learn - more - about fields, refer to Insert, - edit, and view fields in Word.

+

This sample demonstrates how to manage fields, which are placeholders for dynamic data in your document. To learn + more about fields, refer to Insert, edit, and view + fields in Word.

@@ -104,31 +251,55 @@ template:
-
-

Add fields to document

-

At present, Word on the web doesn't support adding - fields - to the document.

-
    -
  1. Open Word on Windows or on Mac.
  2. -
  3. Insert at least one field. To learn how to do so, refer to Insert, - edit, and view fields in Word.
  4. -
  5. Optional: Open the same document in Word on the web.
  6. -
-
-

Try it out

+

Insert fields

+

First, select some text.

+

+

Insert a Date field before the selection.
+ +

+

+

Insert an Addin field before the selection.
+ +

+ +

Get and update fields

+ Get first field's parent body + + Get all fields + + +

+ + + +

+
+

+

Toggle the first field of the selection between locked and unlocked.
+ +

+ +

Delete fields

+
language: html style: diff --git a/samples/word/50-document/manage-settings.yaml b/samples/word/50-document/manage-settings.yaml index effefb824..33c496f41 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -12,7 +12,8 @@ script: $("#delete-all-settings").click(() => tryCatch(deleteAllSettings)); async function addEditSetting() { - // Adds a new custom setting, or edit the value of an existing one. + // Adds a new custom setting or + // edits the value of an existing one. await Word.run(async (context) => { const key = $("#key") .val() diff --git a/samples/word/50-document/manage-styles.yaml b/samples/word/50-document/manage-styles.yaml new file mode 100644 index 000000000..64294c4ee --- /dev/null +++ b/samples/word/50-document/manage-styles.yaml @@ -0,0 +1,324 @@ +order: 10 +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. +host: WORD +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)); + + async function getCount() { + // Gets the number of styles. + 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 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}'.`); + } + }); + } + + 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 { + 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 new style

+
Name the style using letters. Can include digits. 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.
+ + +

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.

+ +
+ 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 new file mode 100644 index 000000000..4a4672679 --- /dev/null +++ b/samples/word/50-document/save-close.yaml @@ -0,0 +1,146 @@ +order: 11 +id: word-document-save-close +name: Manage document save and close +description: Shows how to manage saving and closing document. +host: WORD +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)); + + async function saveNoPrompt() { + // 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(); + context.document.save("Save", text); + await context.sync(); + }); + } + + async function saveAfterPrompt() { + // 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"); + await context.sync(); + }); + } + + async function closeAfterSave() { + // Closes the document after saving. + await Word.run(async (context) => { + context.document.close("Save"); + }); + } + + async function closeWithoutSave() { + // Closes the document without saving any changes. + await Word.run(async (context) => { + context.document.close("SkipSave"); + await context.sync(); + }); + } + + async function save() { + // Saves the document with default behavior + // for current state of the document. + await Word.run(async (context) => { + context.document.save(); + await context.sync(); + }); + } + + async function close() { + // Closes the document with default behavior + // for current state of the document. + await Word.run(async (context) => { + context.document.close(); + }); + } + + /** 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 use the options for saving and closing the current document.

+
+ +
+

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/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 603c135f8..bf3bc9926 100644 --- a/samples/word/90-scenarios/doc-assembly.yaml +++ b/samples/word/90-scenarios/doc-assembly.yaml @@ -18,7 +18,7 @@ script: 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 */); - header.styleBuiltIn = Word.Style.heading1; + header.styleBuiltIn = Word.BuiltInStyleName.heading1; await context.sync(); }); @@ -27,28 +27,28 @@ script: async function addParagraphs() { await Word.run(async (context) => { const paragraph = context.document.body.insertParagraph("Timeline", "End"); - paragraph.style = "Heading 2"; + paragraph.styleBuiltIn = "Heading2"; const paragraph2 = context.document.body.insertParagraph("The Services shall commence on July 31, 2015, and shall continue through July 29, 2015.", "End"); - paragraph2.style = "Normal"; + paragraph2.styleBuiltIn = "Normal"; const paragraph3 = context.document.body.insertParagraph("Project Costs by Phase", "End"); - paragraph3.style = "Heading 2"; + paragraph3.styleBuiltIn = "Heading2"; // Note a content control with the title of "ProjectCosts" is added. Content will be replaced later. const paragraph4 = context.document.body.insertParagraph("", "End"); - paragraph4.style = "Normal"; + paragraph4.styleBuiltIn = "Normal"; paragraph4.font.highlightColor = "#FFFF00"; const contentControl = paragraph4.insertContentControl(); contentControl.title = "ProjectCosts"; const paragraph5 = context.document.body.insertParagraph("Project Team", "End"); - paragraph5.style = "Heading 2"; + paragraph5.styleBuiltIn = "Heading2"; paragraph5.font.highlightColor = "#FFFFFF"; const paragraph6 = context.document.body.insertParagraph("Terms of Work", "End"); - paragraph6.style = "Heading 1"; + paragraph6.styleBuiltIn = "Heading1"; const paragraph7 = context.document.body.insertParagraph("Contractor shall provide the Services and Deliverable(s) as follows:", "End"); - paragraph7.style = "Normal"; + paragraph7.styleBuiltIn = "Normal"; const paragraph8 = context.document.body.insertParagraph("Out-of-Pocket Expenses / Invoice Procedures", "End"); - paragraph8.style = "Heading 2"; + paragraph8.styleBuiltIn = "Heading2"; const paragraph9 = context.document.body.insertParagraph("Client will be invoiced monthly for the consulting services and T&L expenses. Standard Contractor invoicing is assumed to be acceptable. Invoices are due upon receipt. client will be invoiced all costs associated with out-of-pocket expenses (including, without limitation, costs and expenses associated with meals, lodging, local transportation and any other applicable business expenses) listed on the invoice as a separate line item. Reimbursement for out-of-pocket expenses in connection with performance of this SOW, when authorized and up to the limits set forth in this SOW, shall be in accordance with Client's then-current published policies governing travel and associated business expenses, which information shall be provided by the Client Project Manager.", "End"); - paragraph9.style = "Normal"; + paragraph9.styleBuiltIn = "Normal"; // Insert a page break at the end of the document. context.document.body.insertBreak("Page", "End"); diff --git a/samples/word/99-preview-apis/insert-formatted-text.yaml b/samples/word/99-preview-apis/insert-formatted-text.yaml deleted file mode 100644 index c3eab96de..000000000 --- a/samples/word/99-preview-apis/insert-formatted-text.yaml +++ /dev/null @@ -1,73 +0,0 @@ -id: word-insert-formatted-text -name: Insert formatted text -description: Formats text with pre-built styles. -author: OfficeDev -host: WORD -api_set: - WordApi: '1.5' -script: - content: |- - $("#add-preset").click(() => tryCatch(addPreStyledFormattedText)); - - async function addPreStyledFormattedText() { - await Word.run(async (context) => { - const 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.BuiltInStyleName.intenseReference; - - 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 apply built-in styles. -
- -
-

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 a1649c5700e0e931921a6e89820354cc4bbbf9ce..39a08c0d15510aa902b220078e0f6cb4897ba569 100644 GIT binary patch delta 14028 zcmZ9zV{o8B(=Hs_*o|%5wryx##f0JayYb8aU7@Zo6e2}UTB=EAQ>{w>O{;AO zg4REQxvlgJ*k-0aZSPduBr)E1zH#q%=I>ciFKR$-PbpVG;T{-8buD(%u0gv$zna4* zE@AJS@+`AX$nCP69XdEq`&%`4PFb{s1hVim5Y8lX$xecj-aVWaOYTEwtXXbt;7i~ zJtyC~s3H;NciF9!BP1DbCYU=WythAFo2MQyUoo>tod!kALc6K<{s2nrub!oIOf9lL zlV7Lld;-wXA>D+93~hreMbtxAY~%^JGpl%t)WvC0JCMf316-<|tV0zw-*|*E@OYJd zk2{1#9X7_^V}@D%KHA*AY_MGzm+;pYpHytuTS`|78oc9OtD9k+URB3}Rbj@MCa;C9x8`zwv@!uH8YvsnWTLo|-8>q1xEO{=m zJprY&V`!yw_mV4TKi!F9RH)3Jv^6GC@3R%1SxxS`AD#n4(P`MGt9HHuB!M5Je#CA^ z?d%^{E;?YsBDZY)CTDx%y?Q)gfuuOkSJ}m%f#Ojv%qAS7Zq#7IUnWRG^r+vE3l{6? zS~=V^Eo`tx1&5r5b*ajNM0>w);AnXdRE^mu2|{BwFu<{b!EF{^4s7CpfLL@U*&q-B zKke6;P)4>D*W7F0bNCX30;OmPA~mcS%UzLcVw^!M9J5!8dy9Ra^s_;J(WqCVIShBd zZGK!|oL&lR9AG!1mQPuoKqd=KsuQ2dEA;s4BdW+mo4NMUsEaDZ8J=8Djv&u>%_*A0 z8^WSlC(TziO%6UGZU>qUt0FFVsL;>@8ACl@`&km;w0iNC?^G}n-KP1)_(u6PMy2%_ zc&U-sWDCtfmZj-Kuag>VM`B6uIN7GJR?7&jiHIai`Dl+Pxye!jZQBbn4Xz>W$VPv- zxGmqsp7C?$T0b;13U_p{)pd}^{51dCykz`-iT*8J^I#AHYhp0aUfKP6@QdUt2_G4ZdCDtjx7@qzWVhu_6GE z5ErlEZ(aEdLXp0Zx)D_JpH|Fi;KtvMTc6e@#ddlVy|z`|`T^crGe~w(W0~d4^@`|w z>B}m0_?pm{-p9m)^w>Cm8niqd)oOLU!NMnc_+&FZ=cBQ$i8nIkkRxp9KDdzfR_&0J zIx#p9f$e{5< zX8&LW0Rj2?`frx3uNzC&5wkfi&S+>S^TP4UVQ8UoS>RX#3V0&853p{1NWq1O9B?NO z_LMK6l1g>ON`*W>0LRA>0KT4DYI?r3Wxtlv za!glc7n04cyDuEmLI{10lFfemuHLfrP!46f&F1O%yRGR1$!_`gILS!)Yyv50FZ7?! zb0!4iLcd{PmqiWo=2!Dnhf_HSEJM>hy2~GB(}B3IL{;LHbnKnHtM;|ouPF!k zGV$^rhw|Kprxqj-%6~D1txfL_jXQW4l&)pznrYHt_68w@V^>r=%RU71XB|Ba2 z-6OV`WL^9Oq*&9O>8X`GH}k)5-6GEQyr@5nJ|P)JCY^cF5C{l2J`d!1^dn(RCsIVBhimwRF%7k_ z%$Tmk)#KyNjLzAi5kGNI3BL2FUw!!F zxZ)xPVSX|KyYh>rSy@8ZDTFD_E>sdUDE~t@nJiB`qph4NvjU0lWl2#+*f@kKtr#oV z*~zU$cSB)uqiVvHkg?( zVMvJHjQLSmgu~EELar6ZS@M1+27y5CT0Avd$5_%?#=uK`rp~Zyow2~2jA%uXN!X&G zK?0eXdS^9TTIja0IL{plk;f*5_?>jd43;VHdupgD-NAl7v7|MiE)yra!t?it}m)RxTklYdAS8s>b3`m`No-ZTybb^n0dw z!-|v;wi`hkuQFp~Kxc17n>0#UTDc?Zpk;`8(R`hU8lx#$1aS(RUydS3Ql2_eSymaZ zv4H}%L?=?GvCRKp?QBjuMtt_L&#P z(#CF7u8%==eZ2X%8msy5295h-YN41!DRY(~;cR`zlm=8f^hd;$$IRSgL)L(9R3-_O zF)ME{O$^3Sz6s_7|7+T%mw&Wen~17x9W_KAs+hxBKE9a+nn}C$lQN|AoGIO33*`p7H^ymVa4szbho zL%w2$d@S}PzwcczN8`?ug$RI&pvxml3RuqLaE@}WdB1c1rZ?dO?1wFCljII-P&I(&>cP zGRPa&preAzy*vg;zD4_hUQ=QHw*bFU#XZb>bQZf%?~A=%3T(dI-{Prigt|ypBjSji z?kV#j?Q4vimZ1ZrV)b>G9Ui4Jpo+MdWip**^B{~g(qR-hr9&@gjP=~EdeMQ=O}BeS zERcNageLN0zEE=tpTJ|QsIQ2-%ffMkMiNK;!qd#JiS(;cV}8^wGv;S>=ej-K+G!M$ zO8nuW0XG&8wn*kbE=yB`cYLl(V6g$0PAf zw}7%VQ|{9UK7Xb%Mb|@l{h^4V$0#Ggo?7obXv{@q>9i12F5o_sCm>Npaxr$M%TNY9 z)K(x6+<%hDhBVuiOB+C7u$^oQ$=|+4&A@WlVUls$4a>Pb#MdAYP{%gX=IUMUj zbL{3lYy8ZAhSE{p7#OdXYIP_P5>n=U|Dl#haE<6vI(?E^%-EFau%=bFQ4!XNd1Kp& zj-pK1rJzjc4gj3eVXuGYAKSvm=gflfCpvY zK`s5Sqg~H`;=wDPiie%+H*{ZBvS^R;Y9{7q;5iDpKskN#4s}<6g1p`lQ_`u&XX6_> zdn|zi6vsTjPSj4IM=u`Q6BKLqHk`%=+`C&af(3?K4a_u4PJK5F(7#K@m$7sQ<7_EG3WsM3rTVcU1Z~$^#(zF42NX^U1NK!cx}v|IuL4{?Sl1 zdpy$(K^5r(+_|=;e@D&eSpw#S#(F3l=+RJptfn*M`1U8prOb@Negc2WX!{N<_%)o zUZEvuOn2m;|GIz{k_gB5=fZw?D!+bg6!qQ{48F0iqUh*BrR(r6H3n5|lKd9FhE7Oo zjeIrm>XV0Mt>_cI2|wC*ofr1xSjhF=h7#=F(*=ZP`m7`JG}gP(0Ek6(Uxp@tDQ1mc zSRH`4rWFtc>;Fb+DleJ5rLI)NTT%RRSf#^BzFGBoMI7jU54RWU@1HL~ax;}{(hV_f znL^CNp%)}7Jbd?ggVGI_gJ=UaN4r!J*j|IT&iHZ4;`^HEZ%9pwH6iKqr|{G4~U+@d90lUznm&27>J>@LgR)yX6R5Y zxwLu~1d8b$SY5ai5U6POs*0ja6XJjgxASjbS}mXq-iC#)2+g4kyFA^*w}a*21af`O zpuj{b%G>`(48!-4>4o?WQdU`z3+AHv+tbi1lpni4kDzEhR0BK>CMPxzf%kH zk1}3x?UFtMg3y18${_UaQ!0?>@%k;^-CK{e^&xFct#&Mxw3ln{?MA5+ET=q9j4}6> zOe8vqL@fLqUT$H#Jc7K>))#r*yRw!aO5|ZIPr%n~yhG-USFpf)<|V_{M*M!JYlKT8 zJL zvobO-`U&U3v4st@D7lS$|3p)2^Y}PnS#LpP(<;c1!1T|)P-xv2-(J-rD6OvcuMory zuez55djxTLgPeyVxO>8ApxXGI9QBYciA!V?RP__UTxj`#Teewj53R4B@%C!{0jlUN zkmtB&|52XU&TsH$)_80}Wb0-cFxy^obxQ1k&3E=1ymKnLT65RC@vvT9^TDEq=eetI z03!qjSqCQiLyfGEQQiYd*!a#+E+`}Kz39}Lg@I^$o-$9{ta#o zxa$CLuPr@YE+B927LK1981$5-nEK%K`S>>&f+YC~$_$RpR{A{;J)Nqr1#UO0+bywp z7D=5&!BN~S*t^3v_%(ezA%ZoC=;Yo^w$+scH%*#g+)taVH*c7dktvY})@K^J6_wq6 zAKfKgO}?J34h~JJItv<3io7zcz>!zsOX`4%n&k7L9{}{nnzD#Dn#U0B#ohiQ=%|CT z1@YWRJ;dTKl(Z-D96lFDjQdVxqRS`;%s&jWS^*Ah>ELmZl8UEO&C5~W&$Av`&7Rov z>I1^ALePm_JZvb0nQ@7N&aXBrIF&S%-=%Ioc|??3i&`R18@cMudLTTw$znw(u~f z(0Mo$Q!0)hQl=V=HDzHJrAMS(erKse4B0)3IC7m!J;~83ZY41 z;&vx5(GjMs624X&46>DZ!Fp&E!mVU=V4@k{mpWEV+o}L-$iT?WBFpt+5;ZmZkjMF2 zMih)wcnmY0z9GuL4=;athhS;WDl`o8@`Eu`wahA3rej_olSF-b>S`GpA2)$#M!Ub1 zY1&E2Ag@q&g#u2J;i-5;%`K)RTEpOXL^gi+halBMeC3VlgP*`YM!I|x;c z+fhbm(2ry`zttJu4HQ5q?5-{N!CuJfAYefTy5{oCNlqSDM-)vSGCW9A(PZxYT^~le zhve59Nr{SrKwcT7Efw>p$gTnC1iR+0D8_M9(9r~`C9t{2(F3A%v~sdMK1X4+!w8p# zLwz>oVqBteQsD(^_&GHxy$FYbi-0|6VrR)cjNTkmJTh2v=e}1gEN|SX#sS#7kfZ z{iKL=g@9L1h17P=+>Hnp!6m9BSn#cdXaRvvF;IZhA^b!tzUi?8jl6K;HEilZr8ObmL=7XWDj%;ELEzHWUyKc&L~kjFL`>>9{~|*_A-%L>h97S z_ClzyJ9o##`G4y&VQ2LihNO|gT++Y0Cvb5R8O=Wx7g9Sx-);$sfsk90eAAn(#zQtr zJoq;NG^7{l1LtuVksTx%fb9D=#~=b>U3EAojzY;zBqB`(Fyo_1t~a;}s= zL~e*QrA6E;C0!`{t1c60U&PW)e^VXKQ|I!jgoHh426Ytva92TgrOY*a@YF1iOtx_8 z#QJ8{;8sHf)EUhfOs7(&F#Sd4CVB|J8r-zZu0tT-9Jn)&Co3cRK^z+B8h?-x&O>|T z?cMchsv%Plk<8T3DS@##8J&oc>Vk4Ep#{gcjDeotkc%2$FYZgljBO<8`T;`QPtPaW zWtZks_Xu6h_WhLT-V`O*MCsVs3zPT^E9A3$uh*p=D6rk2S{B1|lC-OQC%+x^`m2~7 z$Q~17>2Y}@+m3#nBfyug<2MQ(fxs6mN@zL-#elp^W+qW;#b}-?L;!7J=dNsw-Rp%V zMxMd>XP>fq0q6A3oy=%>Zhp5pjVlzHB@aycYd_MN1X!75v545ONsLnRy5UzXtw^#Y zQ~WY%lURSVrx}6P z=4pWXhdnN#aXXsyQV);WIkgK`-ssU z4G{uN5rswLdtKZ=^K#^D5?hH^ti*j4_-Tytyz3h!6S@_O(<=v?EgKWZ2Y)*3|3_+AvWkjlWoJtmoGZpZW;2aI`h{nGgmY0pgv_22|{%-%Sw?@%NAfJyqg z-VkcA7t<^(H%K0BRnFZsX=xLYI;?Rdqcyq5G>LkX_TToA5B_wW5Sz;Yp-totkZuXQ ztj3@qE(lX49S#qQCFqPyX1T_(S`y@;(F2@bgD5&LR+H{C-sVE95 zJsZ59rN2uGkER^(NH-3sY`elZCXSLdzLWmqg;vOCK|u+I%6B%T$7Dv&je;=sUB;4u zi#J=#o-JVRWy#FNmO8;UhEt#WW~(OoSD?8?qb0lGpN>}=7SMJ`kDlaVW5uWfw>6px zBzmJ(Y$)bogilHsu}~Bfttm{&e5B`_hW%((OK1+Y8fpMm%f|v?-t3dsPsR!z!bM5A zRkO1c0dq~aq}t@I;DQ~}9vayd|6lZK6P7rj(HLj6>s;d`A>^c^UW7!p2v4(YL9jZY zn<2G8Wn%O^bX6l^nkABxQ{7)+yj)?IBurLY5llRfTS^Y=5kXz;`lpRxOpO0rkZYU) zRfNdW+hF2Ef+=&v^9!xCa-hW`Za8DA?3UzR?sKi%Jo&?DJ3kCLnF)mQAA&*JQpI0I zkfxIOooycrs_0zN!b-u<84Hi;Y|*ui3zyHmkRX4vpnwD?osFw7ifHLsG{ zC^UTRAuwITADbr5R@JKjD&NswCfG<<_`>vAzLA~rEVNX#5~gGY=d|cr)}ev@8Nah| zFgsS5v+}=(1aln)(MQ3jcRUPca~CX*&L|{su^AL)CYTqwWNZF;bUBwYMQEu` zWlR{4u$hjK90rK4SOMfxeJ=s|a-^+#$+8h@a|*~o7?G@9SX9R0JrQToLST!7Fu~oK zjvt9;rk-qchf1&jgt!-2gtg!t1Er~Xi(N3ef^>c5VD7aZGPdi% z@EoBuknH5UiKd*&r0T5gQX~aS*9Uu52OCMf{>J{$QY)=_;9Y41OWWw`>U&V1{GA*H zW4=j{23v8QI6j#iNn)-xJhHi-;WKSMKKeP9?%Jm#WvUEty2(vsqZ~EC8r@?i=N)|| z5~q-O2PNB-h9ho{*XY_1J&+^*!;xZf2WEtkI34V2>6BRa=C9!;FPj?gN=nC#pzVcW z986Y`Ro06dU+6$e$IO-ZL6%8KpNvOxE|CtAs;+@<>#JQ7=A2#X(bHE+d{X(kksd`ruCdZvnJJibtzl2f zcpI#g$M@yqS0v;8Ro@HZV>?Zpq+~X)GD4zA>^w@~hbeMS&QMJ4;OJSF45^kvdE&i^ z=ao6POuR3e8eiXwX9iM8w9l<0yp_$^NhMPat*W$^jC#LPuHo5P;B3OIAFGb`0%_#a z;q28`wf~h$Vxo`|Dw;CJ0`uhVYBk*<6(!u`A!_q@&)54~9AVGaHsJg9_&*VY|AY;a zWQlWtC=@GM9cT~`Fk%o8^nbM;wu~;8WPY&l+@;r@s!>t2Oe|u#HqEY90_(TB5wy0ks?R^iJp#%2 z?zBDoXR%M@E!%J)9-IQD&b+B*gf1^nlcVc6=V&T~i;hw{t(B@?mo?B4ss5w_GI>zL z$%JKAwe(%ooZMwpjarcehg;P7KM9Y1*EXQ~QTfJ^5buUH6P^h6_*`0JUml96UB$B> zguXJSO+Zpms`FF+#;>779H6RnUwUQtAOE?L%Up_lX5)+FKWw7qY93Y9pnMs^y#!)r zfZzTW<5y+8i}=w*pT(Q-s^x(QjNgapKJV5-|7g6yN!~4>_gVPq`qu1+IDYd$??ZZW zKM-1E5M(SfmqhP^vS`z_XuTXyUGS#hK?@faV_n@TB+OCCDlgA$R>r5eMScRhFA73S z97!h4-oQH2m#m2~GKXb=1%ATgSaz3_A});1f#)>5OEK ze|%UK=yr%r8Yf!kK{*%oLc=7ZT#jUMnTb zunkbB=Df!IGQ7~*d<)j{<0mtjg2(r)34W9Yz#O&P5rUO;ySY2B zU9nxO+T#>|lG(zG;Sa|#HEnp{)04^Q(MVF|6%QcCN9#)v(7&trZ7AA&8Uy1QaJ4J2go z4lA_?2bXaVeG}*dG+GT5AfEj7kXUm_$y^K$u)_bs)jF+uFT!GQCP5RMyAoN4SEoww33o(&Z+ruupM_6QCFsU7+UF z;XmRraE4n%%t74hXW9!dR4s(4PDvNFoIVdiY>_CDh;(xSznpaakx1L1I~unl5?tNN zEOw`s$y@f^bNHd&?)oaOWaIm4=)ed4?6#v(nkcBy%!6}#9cJmnwRRcB7TU^(zA3bo zby-C*2_={=^1@0R=)Bt|^Un&ZKDNTA!&7-|M1CohHAJaAa>8Znw|*IF&r3$#BZVfJ zW;HNWWKNU=!(ZE)>>ZDHX7tY56M9Q5)h#ugDiauo@M;|5Ba%-*qH_~a96U$bR`@J* zf)wxHk~M|`<(eh)M890s=ZRqOcQ`2|%dyamZ|cBXY*>;xQ#7kIA2**hp&|#?ehR`R z?!MNpYY%a=9lA*hX_f5UUxTK6J)=#PNIM#O)(a2d(O?l>#ueAJuln&MZPAY2!6G!) z9f>+@+KkE`h8nX-Bz8~}Jww}pLaT#Bnw{jW5nSJg$i|)#SiGgZUb9Tn8iHNmx&B+^39FmJ zc@#fys~6>0AN!=%o$WvmQp2CNcwe%;Kf9SOEF4ndgBt~8R&UlX=eD_JM<_pai{OH9 zYS^nG8}IB{kpk_Yu@y@^=q77%Nyq0`Ntt|rVazFmrswmZ6f#|**0{Z~40pNj?+k$$ zQ8<`~y|Abb5lUm7+{6x|%@p+{UmQrq*>01xG`~bwx$^&F9a2V0A7Seyovh(~G(HC0 zCf8u&wO{t{XYd$)J(j)Q73g?Q5l!y>Y19(`m1)P~>m1f;r0y85qhYpCwOu3L=URmc zEDPuJC`P1Zw;yw%Ak0UO(ak3ht+Q2f@e(%4ck~AK-iY~zZ7*2_&!g9P-vw=$FO`EE ztDBq+E^A&KO>*-3fgH?+bqqqLh=ifNcH#-orftfZH-hROh25N}2owaIc8lF-&k&iKsvSAl9>(G4mU%8EIj7OYubIy?@{637VnYt_ZKMD46D+q&}D40{$)gc;ht5bQL{z=aNZ>WtXzvv zF5M(t|FU*iDSPOD&DAc~^y*U4LS9hGtWqJZ)ZjHLn8yqLCFv;*{$sS1>|s5x84PP@F<=5Rd`*BqwSr;5k2Eh!;T$>LMkTDg#Cwhb(0r_jTJ_YP@-l;^$H0 zeAK9DPTY1|;^}&~*%o+0BwSA335^)RZc!q3EL5-d0-L(ez=JJU(TK) z8A7bKP1JmT{~a1p-m0f4BBjIFMlJma{@q#?_*G*>)l~>*HFykjKOj=JF0ur7W%HR=iRJDNSV(q#cGLzh72_{#a=Eeh?&QFdyo z3YGFXZ7-sj{(Pd3tUJLUaJ`%akQbIhD%k$#gv+i@6e~2TJ0baJrJSWeo5Pg+eIC(e zp@mjM$LS%;AL-=bH?_2iz@p$5xH(aTQhZ5~p@y+n$)`xKtIW=A603r_RMBwTKN>8ebKa9mL3=!Ov1=1dwL3=*>*G zTlWu`jvD^0Ch>}GP3*v7llmhrh#vzpyKNDDgazCes23PiU+!8pHHy#ER+7EfRw|S~ zk*}XF4B>uK<^2vl1mf+netO8_`Q(VGx0ju6XQmdX%W9EVL%qFvY7X`cWBKDto@0+7 z*nwGeZ^)++8Jw|Y8O5s>4EiQFmq6Uh0b?_SN1-M&wqay<&G=@Sca$pMm?}Q?ASiT= zkYdJD`<53C8KzQ7cf#F+(P1sp-&^3mI#SP1s;Bo9qKI8Yfs&r+o`H?_buzZ$*;y?s z>FcnpA%@gI&ESf<@cYag>q0V~Nh(5nWnR4q#RB?YxP-ioW%#;U3Y|ldSPAmTs!!<>UibF5`KLcEPz64#Z zKW?|`k;P6-XHE04I>!$TFN8iH=_Y0@_fFOWLDx*K{(9hSktv^iUp6{WEcQ5>E?$l> zAXDzlQAo`yl#!Ps)kb%^3ehbdt>P!Y2JK zh^!WW6bBb|=R2Ju1^3)$@*qOi1v#~MvcYfT1bS`Lx*{^l0n<9IN_XF?hTlDnPWSyW zm^#1WdOnUeJqFdQaPu^d_u~|ofkou~1XnqBIqRY65na0xK?9$M->f#9FjF+%0zY_{ zKiD!>ye4(cduH)9Ya14d&5%CXDb{lH%K02<4zguYNWw%9Tm@ehWZw##tG6oOnUM;m}@L_Gr6SU!N0(Ge+Z1Cjm zu^pbQns$@G@2xF8_zY!8h0k|A{whzteBnEz#rtwzoD-|BC_Dv~Dp0Tdh4X(aR z%H5@>e~2p{QulY+=B3N2qCbS`MzjO%uI+Vuc9!;iDd4hy*-=vuO6_0RNIy93we6I& zdQ4M$z6h@vW##6`MopRtH=8;gQK_m;N)H=z?RDvdTahZRN4mDE8%1?zYFZ7^ zHR?lrMft*d${vBBd0>#BDf*t8ew;MKm3RIbkReXL79wW5itX9LP~804Yaxz5@AHkg zui|a9J`HL_n+v?HVQ@loq4zqddROQ0aVSJd#j`;$2QvSv`Av0MqGjlS1kau|$hh={ zp!c@e11;9&uDUF3xMVXYkO8Iww5N`t6d|ol+@z#?K@Z%f(H39dXb+0gYeZJarTB zwgoTJ$5l52+5uvKp)KI1tgt$xW~}kib`q0SMAv=?jz?unV1lk+xt`w&_pN)YbUpF} z8P;sj3vANytgWNPTqRR}Nq!?RdL#OXP{N>Pg>gMW!|Ba{=kVpVB$uPOV=LH?zk_*6 zZsYGufHmCJ&JNz3==g%e0?%p~f9m5#b3vpinaIVZEpVZrgXq>~>W?tndOZG3Tjl7F3`^iNx7s=-O1Ts#a zv@m(wUn)9V;ko^zHai>xRjG`8HoEz!UHGxA0h~#nv$`x!L{@u0R`IicRFMJEP7HX? zxc@+FiU8N4XKoW^%z~=Y6FkDWWj1I^aL(Vc+E>3&`fyfZmg>V~- zZ~}FLGHrofKDKa8vsrY#Z!FTAURblLy=S?C;BquwAb)?JKI(tuq2WEXg|*`(p*7ut ztR@Nt2=sZxM~ZhqVjq)Hr^6&Sk6WDfdr1Yw%YK6lY!$#GR#G9wpG`wxQY`*MZ>5y& zFN032;7lA)tV!A|VIR?QqXWuL1?tX8cMWtS?X=gI_gjAG(h~0;q4ZgGqd<#*41Dlq zINmx2!O?D@O>CjS9yoAiTeFJ&T>$mF=^T4otMw)4UVH?Fu&*zJs?PIz20xuBzfXxq zYJ$;6zL$d`m|d+8zcs2AU!gXCV^>z6j1sIFq7a%_cA7gf3=XgvS57~CA*u9N zSc8#Xm}g3#6cd^Eu?iM2FG6XmHXzq!S3PY;|A?^j9o7r_@Ue~PFD6h-)w(_SR?0Tl z!R7-g_8dw#k9r=2gv`R+**-Hq_>n`-T)p$+w+#$Vc+th}_o*F?K%Nzt-k_clGbJLF zpq|8&9blhzC?nSX-Y2I@v+W0!-H~8!1E)J>QQ2FqnZ7xyB+~i%oXCaG1ejyqUX3aw zPfMr5soY%#@OxLfA2qnkOLn4aLhQrd3sA)lyw`U*P8ID1E``9bLJJ$NMaD#mcGruc zb2H)I7VkyUYcouYe2Q@6RP8{%fuc}tpm`1|x`T6CyF#*djOC@m=nAB40)!2W3x1kv@Z_rkeB=FsEG>UQm<-5&LZFPDb693*s3*;q-8 zDU1!y7KW90tX;OXOZfS`oWMh{6%3i;TG&9ubfljP4Li<<*xmxpkckdzxdNd~fVr4c z|CtC-vSLJE_b?RdZzH!CzAW5ugA70VmdHNFkPL~YJb*+7LLINiEgck9RD(s(AG(7AS5^$? zSF`JrS-b(>0GFFW5DhXOrw^`K9E__6DU>Pn;4ff;AU}W1$A&6_uh*j$WMB z)werV0xl*`G|JRRDk6=r6>E@wlg2d|Rb$L53Juj*A!!STvAmpv3B88D;DzD2B*03*kd~In4x|w86>6Z$yvUQ3C^pGU zq>6X3DLCn1H0y}{bx?Z}gA?(^`FA?nPVnND;l(`L{*p;?7EunJmCbDtY5MQ|wj|^@ z+pRD%?dEFVpZTua)36S~uU5p@GFItM{%6m2SfgyS4112^<xKMR`}D;{mPbe2lOG9jvp;Co=K!68LZoDW0~K}-Z`6Av}unPtMiwY=O>%z zZzYxCbW{}nA+5jw6<8>mK2$0j2`lXc7RjM$Hf$HdC~vGaN4CC_vGNC#lBcguINpYw z61+(ankY6{j*}^%d7F^q(fh*j;)bHRzZEO7jtU&=7%ilB*~luX*x42_VjmH=7~{EAQtc zfrFLlCn9pyCh3n)MEQl9Kkrxn3>n`8-J8bV8{*&Di;(Q33?8`S5(u}`9&Z~!ToJ+p zekH%MqW%bstunvawws>qVIud86r}M9n=&XdfPNRhuM|Q_#zf04hK!2Qxd}o0-uX$* z;ZB{@^9sI3>2~r6^hjoC9B*XMXts&)J@O-g5GB(pp{jw7okt$W8TVWCQcSkKRJvQpZ&0p`MbaGa>t&cq1I@+k6`*0y$83DyBk{=Xoms$>&mV1QE zc2D<&1VZ<9ibHbez7WTRXzANxZy${`f& zJRPmF9P{7=RRPA_s2fKLvP8VuQjCQq-7{g#rQy9H;#J>o*|QjpfMWg__d+_ z=c8AIXu$vdYX(D%5AXktSp4(D{{Li7nPe+Qj`zP0DIg$-|A+S9@|Gc~N{kTi|8?X3 zw@oig(utT5*fDR?IvaVCqBsp0D1VZ-I5*yZFEcO@5O2u;@%;XmC6PaAMqCK&mrxR# o1nqytAxT)`8(6P!lC}gtn7CL{x&$8>xMb3j1UVFm%zya)Ke(gNp8x;= delta 12170 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 L1s2{!{xkYN- + // 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#getComments:member(1)': - >- // Link to full sample: @@ -13773,7 +13788,7 @@ ["Apple", "Orange", "Pineapple"] ]; const table = context.document.body.insertTable(2, 3, "Start", data); - table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; table.styleFirstColumn = false; await context.sync(); @@ -14042,7 +14057,7 @@ 'Word.BuiltInStyleName:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-formatted-text.yaml + 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( @@ -14259,7 +14274,7 @@ 'Word.ContentControl#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + 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"); @@ -14314,10 +14329,45 @@ await context.sync(); }); +'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 + + 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); + }); + } 'Word.ContentControl#onDeleted:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + 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; @@ -14340,12 +14390,115 @@ }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + 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.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 + + 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) => { + console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); + }); + } +'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 + + 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.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 + + 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 contentControlDeleted(event: Word.ContentControlEventArgs) { + async function contentControlSelectionChanged(event: + Word.ContentControlSelectionChangedEventArgs) { await Word.run(async (context) => { - // Display the deleted content control's ID. - console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`${event.eventType} event detected. IDs of content controls where selection was changed:`); + console.log(event.ids); }); } 'Word.ContentControl#tag:member': @@ -14375,6 +14528,30 @@ await context.sync(); }); +'Word.ContentControlAddedEventArgs#eventType:member': + - >- + // 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': + - >- + // 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.ContentControlAppearance:enum': - >- // Link to full sample: @@ -14431,26 +14608,120 @@ await context.sync(); }); -'Word.ContentControlEventArgs#contentControl:member': +'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': + - >- + // 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.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': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-ondeleted-event.yaml - async function contentControlDeleted(event: Word.ContentControlEventArgs) { + async function contentControlDeleted(event: + Word.ContentControlDeletedEventArgs) { await Word.run(async (context) => { - // Display the deleted content control's ID. - console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`${event.eventType} event detected. IDs of content controls that were deleted:`); + console.log(event.ids); }); } -'Word.ContentControlEventArgs#eventType:member': +'Word.ContentControlEnteredEventArgs#eventType:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml - async function contentControlDeleted(event: Word.ContentControlEventArgs) { + async function contentControlEntered(event: + Word.ContentControlEnteredEventArgs) { await Word.run(async (context) => { - // Display the deleted content control's ID. - console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); + console.log(`${event.eventType} event detected. ID of content control that was entered: ${event.ids[0]}`); + }); + } +'Word.ContentControlEnteredEventArgs#ids: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.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': + - >- + // 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.ContentControlSelectionChangedEventArgs#eventType:member': + - >- + // 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); + }); + } +'Word.ContentControlSelectionChangedEventArgs#ids:member': + - >- + // 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); }); } 'Word.CustomProperty:class': @@ -14792,6 +15063,51 @@ console.warn("Didn't find custom XML part to query"); } }); +'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 + + // 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."); + }); +'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 + + // Gets the number of styles. + + await Word.run(async (context) => { + const styles = context.document.getStyles(); + const count = styles.getCount(); + await context.sync(); + + console.log(`Number of styles: ${count.value}`); + }); 'Word.Document#changeTrackingMode:member': - >- // Link to full sample: @@ -14812,6 +15128,30 @@ console.log("No changes are being tracked."); } }); +'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 + + // 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 + + 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.Document#properties:member': - >- // Link to full sample: @@ -14836,120 +15176,319 @@ settings.load("items"); await context.sync(); - if (settings.items.length == 0) { - console.log("There are no settings"); - } else { - console.log("All settings:"); - for (let i = 0; i < settings.items.length; i++) { - console.log(settings.items[i]); - } + if (settings.items.length == 0) { + console.log("There are no settings"); + } else { + console.log("All settings:"); + for (let i = 0; i < settings.items.length; i++) { + console.log(settings.items[i]); + } + } + }); +'Word.DocumentCreated: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 = context.application.createDocument(externalDocument); + await context.sync(); + + 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.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 + + await Word.run(async (context) => { + const properties = 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.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 + + 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.Field#delete:member(1)': + - >- + // 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) => { + 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"]); + + 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#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#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.DocumentCreated:class': +'Word.Field#kind:member': - >- // 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-fields.yaml - // Updates the text of the current document with the text from another - document passed in as a Base64-encoded string. + // Gets the first field in the document. await Word.run(async (context) => { - // Use the Base64-encoded string representation of the selected .docx file. - const externalDoc = context.application.createDocument(externalDocument); - await context.sync(); + const field = context.document.body.fields.getFirstOrNullObject(); + field.load(["code", "result", "locked", "type", "data", "kind"]); - 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(); + 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.DocumentPropertyType:enum': +'Word.Field#locked:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/30-properties/read-write-custom-document-properties.yaml + 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. await Word.run(async (context) => { - const properties = context.document.properties.customProperties; - properties.load("key,type,value"); + 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."); + } else { + console.log(`The first field in the selection is currently ${field.locked ? "locked" : "unlocked"}.`); + field.locked = !field.locked; 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.EventType:enum': - - >- - // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.yaml - async function contentControlDeleted(event: Word.ContentControlEventArgs) { - await Word.run(async (context) => { - // Display the deleted content control's ID. - console.log(`${event.eventType} event detected. ID of content control that was deleted: ${event.contentControl.id}`); - }); - } -'Word.Field#code:member': + 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 - // Gets the first field in the document body. + // 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(["code", "result"]); + field.load("parentBody/text"); await context.sync(); if (field.isNullObject) { - console.log("There are no fields in this document."); + 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)); + const parentBody = field.parentBody; + console.log("Text of first field's parent body: " + JSON.stringify(parentBody.text)); } }); -'Word.Field#parentBody: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 - // 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#type: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 body. + // Gets the first field in the document. await Word.run(async (context) => { const field = context.document.body.fields.getFirstOrNullObject(); - field.load(["code", "result"]); + field.load(["code", "result", "locked", "type", "data", "kind"]); await context.sync(); if (field.isNullObject) { - console.log("There are no fields in this document."); + 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.FieldCollection#getFirstOrNullObject:member(1)': @@ -14957,19 +15496,22 @@ // 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 body. + // Gets the first field in the document. await Word.run(async (context) => { const field = context.document.body.fields.getFirstOrNullObject(); - field.load(["code", "result"]); + field.load(["code", "result", "locked", "type", "data", "kind"]); await context.sync(); if (field.isNullObject) { - console.log("There are no fields in this document."); + 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.FieldCollection#items:member': @@ -14996,6 +15538,43 @@ } } }); +'Word.FieldType:enum': + - >- + // 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.HeaderFooterType:enum': - >- // Link to full sample: @@ -15831,6 +16410,74 @@ await context.sync(); }); +'Word.Paragraph#style:member': + - >- + // 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 = 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.`); + } + }); +'Word.Paragraph#styleBuiltIn:member': + - >- + // 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"; + const paragraph2 = context.document.body.insertParagraph("The Services shall commence on July 31, 2015, and shall continue through July 29, 2015.", "End"); + paragraph2.styleBuiltIn = "Normal"; + const paragraph3 = context.document.body.insertParagraph("Project Costs by Phase", "End"); + paragraph3.styleBuiltIn = "Heading2"; + // Note a content control with the title of "ProjectCosts" is added. Content will be replaced later. + const paragraph4 = context.document.body.insertParagraph("", "End"); + paragraph4.styleBuiltIn = "Normal"; + paragraph4.font.highlightColor = "#FFFF00"; + const contentControl = paragraph4.insertContentControl(); + contentControl.title = "ProjectCosts"; + const paragraph5 = context.document.body.insertParagraph("Project Team", "End"); + paragraph5.styleBuiltIn = "Heading2"; + paragraph5.font.highlightColor = "#FFFFFF"; + const paragraph6 = context.document.body.insertParagraph("Terms of Work", "End"); + paragraph6.styleBuiltIn = "Heading1"; + const paragraph7 = context.document.body.insertParagraph("Contractor shall provide the Services and Deliverable(s) as follows:", "End"); + paragraph7.styleBuiltIn = "Normal"; + const paragraph8 = context.document.body.insertParagraph("Out-of-Pocket Expenses / Invoice Procedures", "End"); + paragraph8.styleBuiltIn = "Heading2"; + const paragraph9 = context.document.body.insertParagraph("Client will be invoiced monthly for the consulting services and T&L expenses. Standard Contractor invoicing is assumed to be acceptable. Invoices are due upon receipt. client will be invoiced all costs associated with out-of-pocket expenses (including, without limitation, costs and expenses associated with meals, lodging, local transportation and any other applicable business expenses) listed on the invoice as a separate line item. Reimbursement for out-of-pocket expenses in connection with performance of this SOW, when authorized and up to the limits set forth in this SOW, shall be in accordance with Client's then-current published policies governing travel and associated business expenses, which information shall be provided by the Client Project Manager.", "End"); + paragraph9.styleBuiltIn = "Normal"; + // Insert a page break at the end of the document. + context.document.body.insertBreak("Page", "End"); + + await context.sync(); + }); 'Word.Paragraph#text:member': - >- // Link to full sample: @@ -15890,6 +16537,60 @@ await context.sync(); }); +'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: + 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#compareLocationWith:member(1)': - >- // Link to full sample: @@ -16029,6 +16730,28 @@ } await context.sync(); }); +'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 + + // Inserts a Date field before selection. + + await Word.run(async (context) => { + var range = context.document.getSelection().getRange(); + + const field = range.insertField(Word.InsertLocation.before, Word.FieldType.date, '\\@ "M/d/yyyy h:mm am/pm"', true); + + 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)); + } + }); 'Word.Range#insertFootnote:member(1)': - >- // Link to full sample: @@ -16059,6 +16782,18 @@ console.log("Number of footnotes in the selected range: " + footnotes.items.length); }); +'Word.Range#styleBuiltIn:member': + - >- + // 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 */); + header.styleBuiltIn = Word.BuiltInStyleName.heading1; + + await context.sync(); + }); 'Word.RangeLocation:enum': - >- // Link to full sample: @@ -16174,7 +16909,9 @@ // 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 edit the value of an existing one. + // Adds a new custom setting or + + // edits the value of an existing one. await Word.run(async (context) => { const key = $("#key") @@ -16219,21 +16956,197 @@ } } }); -'Word.Style:enum': +'Word.Style#delete:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/25-paragraph/insert-formatted-text.yaml + 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) => { - const sentence = context.document.body.insertParagraph( - "To be or not to be", - "End" - ); + const styleName = $("#style-name-to-delete").val() as string; + if (styleName == "") { + console.warn("Enter a style name to delete."); + return; + } - // 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; + 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}'.`); + } + }); +'Word.Style#font:member': + - >- + // 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) => { + 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.`); + } + }); +'Word.Style#nameLocal:member': + - >- + // 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 = 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.`); + } + }); +'Word.Style#paragraphFormat: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.StyleCollection#getByNameOrNullObject:member(1)': + - >- + // 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) => { + 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."); + }); +'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 + + // Gets the number of styles. + await Word.run(async (context) => { + const styles = context.document.getStyles(); + const count = styles.getCount(); + await context.sync(); + + console.log(`Number of styles: ${count.value}`); + }); +'Word.StyleType:enum': + - >- + // 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 = 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.`); + } }); 'Word.Table:class': - >- @@ -16247,7 +17160,7 @@ ["Apple", "Orange", "Pineapple"] ]; const table = context.document.body.insertTable(2, 3, "Start", data); - table.styleBuiltIn = Word.Style.gridTable5Dark_Accent2; + table.styleBuiltIn = Word.BuiltInStyleName.gridTable5Dark_Accent2; table.styleFirstColumn = false; await context.sync(); diff --git a/view-prod/word.json b/view-prod/word.json index 2472ccedb..b1cb5ebf6 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -3,6 +3,12 @@ "word-basics-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-api-call-es5.yaml", "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/01-basics/basic-common-api-call.yaml", "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/insert-and-change-content-controls.yaml", + "word-content-controls-content-control-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onadded-event.yaml", + "word-content-controls-content-control-onentered-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onentered-event.yaml", + "word-content-controls-content-control-onselectionchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml", + "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-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", @@ -30,9 +36,9 @@ "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/manage-settings.yaml", "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-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/50-document/save-close.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/content-control-ondeleted-event.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-formatted-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/99-preview-apis/insert-formatted-text.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" } \ No newline at end of file diff --git a/view/word.json b/view/word.json index abfae20d3..6d7009305 100644 --- a/view/word.json +++ b/view/word.json @@ -3,6 +3,12 @@ "word-basics-api-call-es5": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-api-call-es5.yaml", "word-basics-basic-common-api-call": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/01-basics/basic-common-api-call.yaml", "word-content-controls-insert-and-change-content-controls": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/insert-and-change-content-controls.yaml", + "word-content-controls-content-control-onadded-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onadded-event.yaml", + "word-content-controls-content-control-onentered-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onentered-event.yaml", + "word-content-controls-content-control-onselectionchanged-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml", + "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-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", @@ -30,9 +36,9 @@ "word-document-manage-settings": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/manage-settings.yaml", "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-save-close": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/50-document/save-close.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-content-control-ondeleted-event": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/content-control-ondeleted-event.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-formatted-text": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/99-preview-apis/insert-formatted-text.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" } \ No newline at end of file From 7a37d95b341770204a630769d173b636ad3aad90 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 19 May 2023 12:15:12 -0700 Subject: [PATCH 163/336] [Word] (fields) Remove Addin code (#792) --- 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 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 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 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 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 64e68b635fad872460597ea67db3c3e123b36704 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 19 May 2023 12:17:32 -0700 Subject: [PATCH 164/336] [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 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 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 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 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 80c111c01ea2049aedf28710c317df6f057d75f2 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Fri, 19 May 2023 17:41:31 -0700 Subject: [PATCH 165/336] [Outlook] Mailbox 1.13 release (#790) * Prepare snippets for Mailbox 1.13 release * Apply suggestion from review --- playlists-prod/outlook.yaml | 110 +++++++++--------- playlists/outlook.yaml | 110 +++++++++--------- .../prepend-text-on-send.yaml | 8 +- .../sensitivity-label.yaml | 10 +- .../sensitivity-labels-catalog.yaml | 10 +- .../delay-message-delivery.yaml | 10 +- .../session-data-apis.yaml | 6 +- .../work-with-client-signatures.yaml | 6 +- snippet-extractor-metadata/outlook.xlsx | Bin 23822 -> 23808 bytes snippet-extractor-output/snippets.yaml | 50 ++++---- view-prod/outlook.json | 12 +- view/outlook.json | 12 +- 12 files changed, 172 insertions(+), 172 deletions(-) rename samples/outlook/{99-preview-apis => 20-item-body}/prepend-text-on-send.yaml (96%) rename samples/outlook/{99-preview-apis => 60-sensitivity-label}/sensitivity-label.yaml (91%) rename samples/outlook/{99-preview-apis => 60-sensitivity-label}/sensitivity-labels-catalog.yaml (89%) rename samples/outlook/{99-preview-apis => 90-other-item-apis}/delay-message-delivery.yaml (93%) rename samples/outlook/{60-event-based-activation => 90-other-item-apis}/session-data-apis.yaml (96%) rename samples/outlook/{60-event-based-activation => 90-other-item-apis}/work-with-client-signatures.yaml (97%) diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index 495c36f28..ea50dfa78 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -77,6 +77,17 @@ group: Item Body api_set: Mailbox: '1.1' +- id: outlook-item-body-prepend-text-on-send + name: Prepend text to item body on send + fileName: prepend-text-on-send.yaml + description: >- + Prepends text to the beginning of the message or appointment's body once + it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/prepend-text-on-send.yaml + group: Item Body + api_set: + Mailbox: '1.13' - id: outlook-item-save-and-close-close name: Close the item fileName: close.yaml @@ -373,26 +384,28 @@ group: Display Items api_set: Mailbox: '1.9' -- id: outlook-work-with-client-signatures - name: Work with client signatures (Compose) - fileName: work-with-client-signatures.yaml +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml description: >- - Check if the client signature is enabled, disable the client signature, get - the compose type, and set a signature in Compose mode. + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - group: Event Based Activation + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml + group: Sensitivity Label api_set: - Mailbox: '1.10' -- id: outlook-event-based-activation-session-data-apis - name: Work with session data APIs (Compose) - fileName: session-data-apis.yaml - description: 'Set, get, get all, remove, and clear session data in Compose mode.' + Mailbox: '1.13' +- id: outlook-sensitivity-labels-sensitivity-label + name: Work with sensitivity labels (Compose) + fileName: sensitivity-label.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml - group: Event Based Activation + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + group: Sensitivity Label api_set: - Mailbox: '1.11' + Mailbox: '1.13' - id: outlook-delegates-and-shared-folders-get-shared-properties name: Perform an operation as delegate fileName: get-shared-properties.yaml @@ -701,56 +714,43 @@ group: Other Item APIs api_set: Mailbox: '1.1' -- 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. - 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-item-body-prepend-text-on-send - name: Prepend text to item body on send - fileName: prepend-text-on-send.yaml - description: >- - Prepends text to the beginning of the message or appointment's body once - it's sent. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels-catalog - name: Work with the sensitivity labels catalog - fileName: sensitivity-labels-catalog.yaml +- id: outlook-other-item-apis-work-with-client-signatures + name: Work with client signatures (Compose) + fileName: work-with-client-signatures.yaml description: >- - Determines if sensitivity labels are enabled on the mailbox and retrieves - all available labels from the catalog. + Checks if the client signature is enabled, disables the client signature, + gets the compose type, and sets a signature in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + group: Other Item APIs api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-label - name: Work with sensitivity labels (Compose) - fileName: sensitivity-label.yaml - description: >- - Gets and sets the sensitivity label on a message or appointment in compose - mode. + Mailbox: '1.10' +- 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.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/session-data-apis.yaml + group: Other Item APIs api_set: - Mailbox: preview + Mailbox: '1.11' - id: outlook-delay-message-delivery name: Get and set message delivery (Message Compose) fileName: delay-message-delivery.yaml description: Gets and sets the delivery date and time of a message in compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/delay-message-delivery.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. + 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 diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index 240eb2d0f..d6a726dd1 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -77,6 +77,17 @@ group: Item Body api_set: Mailbox: '1.1' +- id: outlook-item-body-prepend-text-on-send + name: Prepend text to item body on send + fileName: prepend-text-on-send.yaml + description: >- + Prepends text to the beginning of the message or appointment's body once + it's sent. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/prepend-text-on-send.yaml + group: Item Body + api_set: + Mailbox: '1.13' - id: outlook-item-save-and-close-close name: Close the item fileName: close.yaml @@ -373,26 +384,28 @@ group: Display Items api_set: Mailbox: '1.9' -- id: outlook-work-with-client-signatures - name: Work with client signatures (Compose) - fileName: work-with-client-signatures.yaml +- id: outlook-sensitivity-labels-sensitivity-labels-catalog + name: Work with the sensitivity labels catalog + fileName: sensitivity-labels-catalog.yaml description: >- - Check if the client signature is enabled, disable the client signature, get - the compose type, and set a signature in Compose mode. + Determines if sensitivity labels are enabled on the mailbox and retrieves + all available labels from the catalog. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml - group: Event Based Activation + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml + group: Sensitivity Label api_set: - Mailbox: '1.10' -- id: outlook-event-based-activation-session-data-apis - name: Work with session data APIs (Compose) - fileName: session-data-apis.yaml - description: 'Set, get, get all, remove, and clear session data in Compose mode.' + Mailbox: '1.13' +- id: outlook-sensitivity-labels-sensitivity-label + name: Work with sensitivity labels (Compose) + fileName: sensitivity-label.yaml + description: >- + Gets and sets the sensitivity label on a message or appointment in compose + mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/session-data-apis.yaml - group: Event Based Activation + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-sensitivity-label/sensitivity-label.yaml + group: Sensitivity Label api_set: - Mailbox: '1.11' + Mailbox: '1.13' - id: outlook-delegates-and-shared-folders-get-shared-properties name: Perform an operation as delegate fileName: get-shared-properties.yaml @@ -701,56 +714,43 @@ group: Other Item APIs api_set: Mailbox: '1.1' -- 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. - 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-item-body-prepend-text-on-send - name: Prepend text to item body on send - fileName: prepend-text-on-send.yaml - description: >- - Prepends text to the beginning of the message or appointment's body once - it's sent. - rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml - group: Preview APIs - api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-labels-catalog - name: Work with the sensitivity labels catalog - fileName: sensitivity-labels-catalog.yaml +- id: outlook-other-item-apis-work-with-client-signatures + name: Work with client signatures (Compose) + fileName: work-with-client-signatures.yaml description: >- - Determines if sensitivity labels are enabled on the mailbox and retrieves - all available labels from the catalog. + Checks if the client signature is enabled, disables the client signature, + gets the compose type, and sets a signature in Compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml + group: Other Item APIs api_set: - Mailbox: preview -- id: outlook-sensitivity-labels-sensitivity-label - name: Work with sensitivity labels (Compose) - fileName: sensitivity-label.yaml - description: >- - Gets and sets the sensitivity label on a message or appointment in compose - mode. + Mailbox: '1.10' +- 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.' rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml - group: Preview APIs + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/session-data-apis.yaml + group: Other Item APIs api_set: - Mailbox: preview + Mailbox: '1.11' - id: outlook-delay-message-delivery name: Get and set message delivery (Message Compose) fileName: delay-message-delivery.yaml description: Gets and sets the delivery date and time of a message in compose mode. rawUrl: >- - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/delay-message-delivery.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. + 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 diff --git a/samples/outlook/99-preview-apis/prepend-text-on-send.yaml b/samples/outlook/20-item-body/prepend-text-on-send.yaml similarity index 96% rename from samples/outlook/99-preview-apis/prepend-text-on-send.yaml rename to samples/outlook/20-item-body/prepend-text-on-send.yaml index 84d875ef0..639537b9c 100644 --- a/samples/outlook/99-preview-apis/prepend-text-on-send.yaml +++ b/samples/outlook/20-item-body/prepend-text-on-send.yaml @@ -1,10 +1,10 @@ -order: 2 +order: 7 id: outlook-item-body-prepend-text-on-send name: Prepend text to item body on send description: Prepends text to the beginning of the message or appointment's body once it's sent. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.13' script: content: | $("#prepend-on-send").click(prependOnSend); @@ -66,8 +66,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/sensitivity-label.yaml b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml similarity index 91% rename from samples/outlook/99-preview-apis/sensitivity-label.yaml rename to samples/outlook/60-sensitivity-label/sensitivity-label.yaml index 165d6b36c..c196d0ec7 100644 --- a/samples/outlook/99-preview-apis/sensitivity-label.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml @@ -1,10 +1,10 @@ -order: 4 +order: 2 id: outlook-sensitivity-labels-sensitivity-label name: Work with sensitivity labels (Compose) description: Gets and sets the sensitivity label on a message or appointment in compose mode. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.13' script: content: | $("#get-sensitivity-label").click(getCurrentSensitivityLabel); @@ -60,7 +60,7 @@ script: template: content: |-

-

This sample shows how to get and set the sensitivity label on a message or appointment being composed.

+

This sample shows how to get and set the sensitivity label on a message or appointment being composed. To learn more about the sensitivity label API, see Manage the sensitivity label of your message or appointment in compose mode.

Required mode: Compose

@@ -88,8 +88,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/sensitivity-labels-catalog.yaml b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml similarity index 89% rename from samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml rename to samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml index ee54f1313..6b0d2dc3c 100644 --- a/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml +++ b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml @@ -1,10 +1,10 @@ -order: 3 +order: 1 id: outlook-sensitivity-labels-sensitivity-labels-catalog name: Work with the sensitivity labels catalog description: Determines if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.13' script: content: | $("#get-sensitivity-labels-enabled").click(getSensitivityLabelsCatalogIsEnabled); @@ -43,7 +43,7 @@ script: template: content: |-
-

This sample shows how to determine if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog.

+

This sample shows how to determine if sensitivity labels are enabled on the mailbox and retrieves all available labels from the catalog. To learn more about the sensitivity label API, see Manage the sensitivity label of your message or appointment in compose mode.

Required mode: Compose

@@ -71,8 +71,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/delay-message-delivery.yaml b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml similarity index 93% rename from samples/outlook/99-preview-apis/delay-message-delivery.yaml rename to samples/outlook/90-other-item-apis/delay-message-delivery.yaml index 8fff026cb..9230db2d7 100644 --- a/samples/outlook/99-preview-apis/delay-message-delivery.yaml +++ b/samples/outlook/90-other-item-apis/delay-message-delivery.yaml @@ -1,10 +1,10 @@ -order: 5 +order: 21 id: outlook-delay-message-delivery name: Get and set message delivery (Message Compose) description: Gets and sets the delivery date and time of a message in compose mode. host: OUTLOOK api_set: - Mailbox: preview + Mailbox: '1.13' script: content: | $("#get-date").click(getDeliveryDate); @@ -66,7 +66,7 @@ script: template: content: |-
-

This sample gets and sets the delivery date and time of a message in compose mode.

+

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

@@ -109,8 +109,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/60-event-based-activation/session-data-apis.yaml b/samples/outlook/90-other-item-apis/session-data-apis.yaml similarity index 96% rename from samples/outlook/60-event-based-activation/session-data-apis.yaml rename to samples/outlook/90-other-item-apis/session-data-apis.yaml index 2d01cff55..0947b5ca8 100644 --- a/samples/outlook/60-event-based-activation/session-data-apis.yaml +++ b/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -1,7 +1,7 @@ -order: 2 -id: outlook-event-based-activation-session-data-apis +order: 20 +id: outlook-other-item-apis-session-data-apis name: Work with session data APIs (Compose) -description: 'Set, get, get all, remove, and clear 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/60-event-based-activation/work-with-client-signatures.yaml b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml similarity index 97% rename from samples/outlook/60-event-based-activation/work-with-client-signatures.yaml rename to samples/outlook/90-other-item-apis/work-with-client-signatures.yaml index cb64a63b0..ac5626b40 100644 --- a/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml +++ b/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml @@ -1,7 +1,7 @@ -order: 1 -id: outlook-work-with-client-signatures +order: 19 +id: outlook-other-item-apis-work-with-client-signatures name: Work with client signatures (Compose) -description: 'Check if the client signature is enabled, disable the client signature, get the compose type, and set 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/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 43efca090798a66a31c67ed4b20fa48afb9ff4e4..15b25afd5158f4642443b5a6c7de23a6f64e992c 100644 GIT binary patch delta 15595 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 aX1aplv`N2p1;CGzc62GBVKo0U+5ZD-tgy}i delta 15599 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 // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -7827,7 +7827,7 @@ 'Office.AppointmentCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml // Disable the client signature. @@ -8118,7 +8118,7 @@ 'Office.AppointmentCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -8497,7 +8497,7 @@ 'Office.AppointmentCompose#sessionData:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + 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) { @@ -9336,7 +9336,7 @@ 'Office.Body#prependOnSendAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml + 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. @@ -9435,7 +9435,7 @@ 'Office.Body#setSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -9464,7 +9464,7 @@ ); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -9592,7 +9592,7 @@ 'Office.DelayDeliveryTime#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml + 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. @@ -9613,7 +9613,7 @@ 'Office.DelayDeliveryTime#setAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml + 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. @@ -10357,7 +10357,7 @@ 'Office.MailboxEnums.ComposeType:enum': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -10976,7 +10976,7 @@ function(result) { console.log(result); }); - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -11189,7 +11189,7 @@ 'Office.MessageCompose#delayDeliveryTime:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml + 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. @@ -11212,7 +11212,7 @@ 'Office.MessageCompose#disableClientSignatureAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/work-with-client-signatures.yaml // Disable the client signature. @@ -11305,7 +11305,7 @@ 'Office.MessageCompose#getComposeTypeAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -11426,7 +11426,7 @@ 'Office.MessageCompose#isClientSignatureEnabledAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml + 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. @@ -11581,7 +11581,7 @@ 'Office.MessageCompose#sessionData:member': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + 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) { @@ -12773,7 +12773,7 @@ 'Office.SensitivityLabel#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml + 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. @@ -12793,7 +12793,7 @@ 'Office.SensitivityLabel#setAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml + 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. @@ -12826,7 +12826,7 @@ 'Office.SensitivityLabelsCatalog#getAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + 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. @@ -12848,7 +12848,7 @@ 'Office.SensitivityLabelsCatalog#getIsEnabledAsync:member(2)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml + 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. @@ -12863,7 +12863,7 @@ 'Office.SessionData#clearAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + 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) { @@ -12875,7 +12875,7 @@ 'Office.SessionData#getAllAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + 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) { @@ -12887,7 +12887,7 @@ 'Office.SessionData#getAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + 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", @@ -12901,7 +12901,7 @@ 'Office.SessionData#removeAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + 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", @@ -12916,7 +12916,7 @@ 'Office.SessionData#setAsync:member(1)': - >- // Link to full sample: - https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml + 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", diff --git a/view-prod/outlook.json b/view-prod/outlook.json index 7fae12c6f..cf3422451 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -7,6 +7,7 @@ "outlook-item-body-get-body-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/get-body-format.yaml", "outlook-item-body-append-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/20-item-body/append-text-on-send.yaml", "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-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", @@ -39,8 +40,8 @@ "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/55-display-items/display-reply-with-attachments.yaml", - "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml", - "outlook-event-based-activation-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-event-based-activation/session-data-apis.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/60-sensitivity-label/sensitivity-label.yaml", "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", @@ -74,10 +75,9 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", + "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-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/delay-message-delivery.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/99-preview-apis/close-async.yaml" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index b5251129b..9fdbced1e 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -7,6 +7,7 @@ "outlook-item-body-get-body-format": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/get-body-format.yaml", "outlook-item-body-append-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/20-item-body/append-text-on-send.yaml", "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-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", @@ -39,8 +40,8 @@ "outlook-display-items-display-existing-appointment": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-existing-appointment.yaml", "outlook-display-items-display-reply-forms": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-forms.yaml", "outlook-display-items-display-reply-with-attachments": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/55-display-items/display-reply-with-attachments.yaml", - "outlook-work-with-client-signatures": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/work-with-client-signatures.yaml", - "outlook-event-based-activation-session-data-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-event-based-activation/session-data-apis.yaml", + "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml", + "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/60-sensitivity-label/sensitivity-label.yaml", "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", @@ -74,10 +75,9 @@ "outlook-other-item-apis-get-date-time-created-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-created-read.yaml", "outlook-other-item-apis-get-date-time-modified-read": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-date-time-modified-read.yaml", "outlook-other-item-apis-get-diagnostic-information": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/90-other-item-apis/get-diagnostic-information.yaml", + "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-calendar-properties-apis": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/calendar-properties-apis.yaml", - "outlook-item-body-prepend-text-on-send": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/prepend-text-on-send.yaml", - "outlook-sensitivity-labels-sensitivity-labels-catalog": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-labels-catalog.yaml", - "outlook-sensitivity-labels-sensitivity-label": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/sensitivity-label.yaml", - "outlook-delay-message-delivery": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/delay-message-delivery.yaml", "outlook-close-async": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/outlook/99-preview-apis/close-async.yaml" } \ No newline at end of file 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 166/336] 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 167/336] 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 0757bfbb694f45d46aad4effbfbd81cc5b21b958 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 5 Jul 2023 14:35:24 -0700 Subject: [PATCH 168/336] [Outlook] (set body/subject on read) Create Script Lab snippets (#797) --- playlists-prod/outlook.yaml | 11 ++ playlists/outlook.yaml | 11 ++ .../outlook/99-preview-apis/close-async.yaml | 2 +- .../set-displayed-body-subject.yaml | 97 ++++++++++++++ snippet-extractor-metadata/outlook.xlsx | Bin 23808 -> 24070 bytes snippet-extractor-output/snippets.yaml | 120 ++++++++++++++++++ view-prod/outlook.json | 3 +- view/outlook.json | 3 +- 8 files changed, 244 insertions(+), 3 deletions(-) create mode 100644 samples/outlook/99-preview-apis/set-displayed-body-subject.yaml diff --git a/playlists-prod/outlook.yaml b/playlists-prod/outlook.yaml index ea50dfa78..9164cfb85 100644 --- a/playlists-prod/outlook.yaml +++ b/playlists-prod/outlook.yaml @@ -761,5 +761,16 @@ 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 api_set: Mailbox: preview \ No newline at end of file diff --git a/playlists/outlook.yaml b/playlists/outlook.yaml index d6a726dd1..9d85d789b 100644 --- a/playlists/outlook.yaml +++ b/playlists/outlook.yaml @@ -763,3 +763,14 @@ 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 + api_set: + Mailbox: preview diff --git a/samples/outlook/99-preview-apis/close-async.yaml b/samples/outlook/99-preview-apis/close-async.yaml index d64578bb0..e64b5b4d2 100644 --- a/samples/outlook/99-preview-apis/close-async.yaml +++ b/samples/outlook/99-preview-apis/close-async.yaml @@ -1,4 +1,4 @@ -order: 6 +order: 2 id: outlook-close-async name: Close the current message and discard changes (Message Compose) description: Closes the current message and discards any unsaved changes when specified. diff --git a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml new file mode 100644 index 000000000..722728905 --- /dev/null +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -0,0 +1,97 @@ +order: 3 +id: outlook-set-displayed-body-subject +name: Temporarily set the body or subject displayed in a message (Message Read) +description: Temporarily sets the content displayed in the body or subject of a message in read mode. +host: OUTLOOK +api_set: + Mailbox: preview +script: + content: | + $("#set-body").click(setDisplayedBody); + $("#set-subject").click(setDisplayedSubject); + + 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(); + Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Action failed with error: ${asyncResult.error.message}`); + return; + } + + console.log("Temporarily set the content displayed in the body."); + }); + } + + 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(); + Office.context.mailbox.item.display.subject.setAsync(subjectText, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Action failed with error: ${asyncResult.error.message}`); + return; + } + + console.log("Temporarily set the content displayed in the subject field."); + }); + } + 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

+
+ + +
+ +
+
+ + +
+ +
+ 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; + margin-top: 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/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 15b25afd5158f4642443b5a6c7de23a6f64e992c..dff1cd06f4239bddbd40670b7921abe2d2b6ea8f 100644 GIT binary patch delta 14946 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 7c2ced31d..63f063afd 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9633,6 +9633,102 @@ } }); } +'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 + + // 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(); + Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => + { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Action failed with error: ${asyncResult.error.message}`); + return; + } + + console.log("Temporarily set the content displayed in the body."); + }); +'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 + + // 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(); + Office.context.mailbox.item.display.subject.setAsync(subjectText, + (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Action failed with error: ${asyncResult.error.message}`); + return; + } + + console.log("Temporarily set the content displayed in the subject field."); + }); +'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 + + // 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(); + Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => + { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Action failed with error: ${asyncResult.error.message}`); + return; + } + + console.log("Temporarily set the content displayed in the body."); + }); +'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 + + // 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(); + Office.context.mailbox.item.display.subject.setAsync(subjectText, + (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Action failed with error: ${asyncResult.error.message}`); + return; + } + + console.log("Temporarily set the content displayed in the subject field."); + }); 'Office.EnhancedLocation#addAsync:member(1)': - >- // Link to full sample: @@ -11772,6 +11868,30 @@ console.log(`Date and time item last modified: ${Office.context.mailbox.item.dateTimeModified}`); +'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 + + // 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(); + Office.context.mailbox.item.display.body.setAsync(bodyText, (asyncResult) => + { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log(`Action failed with error: ${asyncResult.error.message}`); + return; + } + + console.log("Temporarily set the content displayed in the body."); + }); 'Office.MessageRead#displayReplyAllForm:member(1)': - >- // Link to full sample: diff --git a/view-prod/outlook.json b/view-prod/outlook.json index cf3422451..83e0bc2ac 100644 --- a/view-prod/outlook.json +++ b/view-prod/outlook.json @@ -79,5 +79,6 @@ "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-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-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" } \ No newline at end of file diff --git a/view/outlook.json b/view/outlook.json index 9fdbced1e..83c8738c3 100644 --- a/view/outlook.json +++ b/view/outlook.json @@ -79,5 +79,6 @@ "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-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-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" } \ No newline at end of file From ba216a56d4ca1724dcf01b0a6a6b075be55d71dc Mon Sep 17 00:00:00 2001 From: "microsoft-github-policy-service[bot]" <77245923+microsoft-github-policy-service[bot]@users.noreply.github.com> Date: Fri, 7 Jul 2023 17:58:13 +0000 Subject: [PATCH 169/336] Add prIssueManagement.yml to onboard repo to GitOps.ResourceManagement as FabricBot replacement Owners of the FabricBot configuration should have received email notification. The same information contained in the email is published internally at: https://aka.ms/gim/fabricbot. Details on the replacement service and the syntax of the new yaml configuration file is available publicly at: https://microsoft.github.io/GitOps/policies/resource-management.html Please review and merge this PR to complete the process of onboarding to the new service. --- .github/policies/resourceManagement.yml | 155 ++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 .github/policies/resourceManagement.yml diff --git a/.github/policies/resourceManagement.yml b/.github/policies/resourceManagement.yml new file mode 100644 index 000000000..4cacb51af --- /dev/null +++ b/.github/policies/resourceManagement.yml @@ -0,0 +1,155 @@ +id: +name: GitOps.PullRequestIssueManagement +description: GitOps.PullRequestIssueManagement primitive +owner: +resource: repository +disabled: false +where: +configuration: + resourceManagementConfiguration: + scheduledSearches: + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isIssue + - isOpen + - hasLabel: + label: 'Needs: author feedback' + - noActivitySince: + days: 4 + - isNotLabeledWith: + label: 'Status: no recent activity' + actions: + - addLabel: + label: 'Status: no recent activity' + - addReply: + reply: This issue has been automatically marked as stale because it is marked as needing author feedback but has not had any activity for **4 days**. It will be closed if no further activity occurs **within 3 days of this comment**. Thank you for your interest in Office Add-ins! + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isIssue + - isOpen + - hasLabel: + label: 'Needs: author feedback' + - hasLabel: + label: 'Status: no recent activity' + - noActivitySince: + days: 3 + actions: + - addReply: + reply: This issue has been closed due to inactivity. Please comment if you still need assistance and we'll re-open the issue. + - closeIssue + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isIssue + - isOpen + - hasLabel: + label: 'Type: programming question' + actions: + - addReply: + reply: Thanks for your interest in Office Add-ins development! Feedback here is intended for reporting problems with Script Lab *snippets*. Can you please post your question to Stack Overflow with the [office-js](https://stackoverflow.com/questions/tagged/office-js) tag? By posting how-to questions like this to Stack Overflow, you'll not only be able to reach a broader audience of folks who have expertise in the area, but will also enable others to benefit from any answers that are provided there. Thanks! + - closeIssue + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isIssue + - isOpen + - hasLabel: + label: 'Type: product feature request' + actions: + - addReply: + reply: Thanks for your interest in Office Add-ins development! Feedback here is intended for reporting problems with Script Lab *snippets*. Can you please post this feature request to the [Microsoft 365 Developer Platform Tech Community](https://techcommunity.microsoft.com/t5/microsoft-365-developer-platform/idb-p/Microsoft365DeveloperPlatform)? Feature Requests submitted to Tech Community are regularly reviewed by the product teams as they plan future releases. Thanks! + - closeIssue + eventResponderTasks: + - if: + - payloadType: Issues + - isAction: + action: Opened + - not: isAssignedToSomeone + then: + - addLabel: + label: 'Needs: triage :mag:' + description: + - if: + - payloadType: Issues + - not: + isAction: + action: Closed + - hasLabel: + label: 'Status: no recent activity' + then: + - removeLabel: + label: 'Status: no recent activity' + description: + - if: + - payloadType: Issue_Comment + - hasLabel: + label: 'Status: no recent activity' + then: + - removeLabel: + label: 'Status: no recent activity' + description: + - if: + - payloadType: Issue_Comment + - isAction: + action: Created + - isActivitySender: + issueAuthor: True + - hasLabel: + label: 'Needs: author feedback' + then: + - addLabel: + label: 'Needs: attention :wave:' + - removeLabel: + label: 'Needs: author feedback' + description: + - if: + - payloadType: Pull_Request + then: + - inPrLabel: + label: 'Status: in PR' + description: + - if: + - payloadType: Issues + - labelAdded: + label: 'Status: in PR' + - hasLabel: + label: 'Status: under investigation' + then: + - removeLabel: + label: 'Status: under investigation' + description: + triggerOnOwnActions: true + - if: + - payloadType: Issues + - labelAdded: + label: 'Status: in PR' + - hasLabel: + label: 'Status: in backlog' + then: + - removeLabel: + label: 'Status: in backlog' + description: + triggerOnOwnActions: true + - if: + - payloadType: Issues + - labelAdded: + label: 'Status: in PR' + - hasLabel: + label: 'Needs: attention :wave:' + then: + - removeLabel: + label: 'Needs: attention :wave:' + description: + triggerOnOwnActions: true +onFailure: +onSuccess: From 648d3aad499a1da4ccc3131fa37a7f569f5fdf99 Mon Sep 17 00:00:00 2001 From: "microsoft-github-policy-service[bot]" <77245923+microsoft-github-policy-service[bot]@users.noreply.github.com> Date: Fri, 7 Jul 2023 17:58:14 +0000 Subject: [PATCH 170/336] Deleting fabricbot.json --- .github/fabricbot.json | 903 ----------------------------------------- 1 file changed, 903 deletions(-) delete mode 100644 .github/fabricbot.json diff --git a/.github/fabricbot.json b/.github/fabricbot.json deleted file mode 100644 index f00d004c0..000000000 --- a/.github/fabricbot.json +++ /dev/null @@ -1,903 +0,0 @@ -{ - "version": "1.0", - "tasks": [ - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "config": { - "taskName": "Add needs triage label to new issues", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "opened" - } - }, - { - "operator": "not", - "operands": [ - { - "name": "isAssignedToSomeone", - "parameters": {} - } - ] - } - ] - }, - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "Needs: triage :mag:" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ] - }, - "id": "9FS-CM3HK" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "taskName": "Add no recent activity label to issues", - "frequency": [ - { - "weekDay": 0, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isIssue", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs: author feedback" - } - }, - { - "name": "noActivitySince", - "parameters": { - "days": 4 - } - }, - { - "name": "noLabel", - "parameters": { - "label": "Status: no recent activity" - } - } - ], - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "Status: no recent activity" - } - }, - { - "name": "addReply", - "parameters": { - "comment": "This issue has been automatically marked as stale because it is marked as needing author feedback but has not had any activity for **4 days**. It will be closed if no further activity occurs **within 3 days of this comment**. Thank you for your interest in Office Add-ins!" - } - } - ] - }, - "id": "MdBActeXZZ" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "taskName": "Close stale issues", - "frequency": [ - { - "weekDay": 0, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isIssue", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs: author feedback" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Status: no recent activity" - } - }, - { - "name": "noActivitySince", - "parameters": { - "days": 3 - } - } - ], - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "This issue has been closed due to inactivity. Please comment if you still need assistance and we'll re-open the issue." - } - }, - { - "name": "closeIssue", - "parameters": {} - } - ] - }, - "id": "X16DiT_Ysm" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "config": { - "taskName": "Remove no recent activity label when there is activity in an issue", - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "closed" - } - } - ] - }, - { - "name": "hasLabel", - "parameters": { - "label": "Status: no recent activity" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Status: no recent activity" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ] - }, - "id": "HeNTYmKhkI" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "config": { - "taskName": "Remove no recent activity label when an issue is commented on", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Status: no recent activity" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Status: no recent activity" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issue_comment" - ] - }, - "id": "7gwnCtQNuy" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "config": { - "taskName": "Replace needs author feedback label with needs attention label when the author comments on an issue", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "created" - } - }, - { - "name": "isActivitySender", - "parameters": { - "user": { - "type": "author" - } - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs: author feedback" - } - } - ] - }, - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "Needs: attention :wave:" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs: author feedback" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issue_comment" - ] - }, - "id": "Nb7fv4SsSn" - }, - { - "taskType": "trigger", - "capabilityId": "InPrLabel", - "subCapability": "InPrLabel", - "version": "1.0", - "config": { - "taskName": "Adds In-PR Label", - "fixedLabelEnabled": true, - "label_inPr": "Status: in PR", - "label_fixed": "Status: fixed" - }, - "id": "pBX7ROvA5M" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "frequency": [ - { - "weekDay": 0, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isIssue", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Type: programming question" - } - } - ], - "taskName": "Redirect programming questions to Stack Overflow", - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "Thanks for your interest in Office Add-ins development! Feedback here is intended for reporting problems with Script Lab *snippets*. Can you please post your question to Stack Overflow with the [office-js](https://stackoverflow.com/questions/tagged/office-js) tag? By posting how-to questions like this to Stack Overflow, you'll not only be able to reach a broader audience of folks who have expertise in the area, but will also enable others to benefit from any answers that are provided there. Thanks!" - } - }, - { - "name": "closeIssue", - "parameters": {} - } - ] - }, - "id": "Yq4ZDzWMNg" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "frequency": [ - { - "weekDay": 0, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isIssue", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Type: product feature request" - } - } - ], - "taskName": "Redirect product feature requests to Tech Community", - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "Thanks for your interest in Office Add-ins development! Feedback here is intended for reporting problems with Script Lab *snippets*. Can you please post this feature request to the [Microsoft 365 Developer Platform Tech Community](https://techcommunity.microsoft.com/t5/microsoft-365-developer-platform/idb-p/Microsoft365DeveloperPlatform)? Feature Requests submitted to Tech Community are regularly reviewed by the product teams as they plan future releases. Thanks!" - } - }, - { - "name": "closeIssue", - "parameters": {} - } - ] - }, - "id": "asPoKJtrPC" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "0dk0asB6B", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "labelAdded", - "parameters": { - "label": "Status: in PR" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Status: under investigation" - } - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "Remove Status: under investigation label from issue when Status: in PR label is added", - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Status: under investigation" - } - } - ], - "dangerZone": { - "respondToBotActions": true, - "acceptRespondToBotActions": true - } - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "Yi7lthpb2", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "labelAdded", - "parameters": { - "label": "Status: in PR" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Status: in backlog" - } - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "Remove Status: in backlog label from issue when Status: in PR label is added", - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Status: in backlog" - } - } - ], - "dangerZone": { - "respondToBotActions": true, - "acceptRespondToBotActions": true - } - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "uCMkf_rmw", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "labelAdded", - "parameters": { - "label": "Status: in PR" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs: attention :wave:" - } - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "Remove Needs: attention label from issue when Status: in PR label is added", - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs: attention :wave:" - } - } - ], - "dangerZone": { - "respondToBotActions": true, - "acceptRespondToBotActions": true - } - } - } - ], - "userGroups": [] -} 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 171/336] [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 172/336] [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 zcmZ8{bx<5YvnR5+E$+(#ixWJ--CaV^;1Dzr2%f+K!QCymyF+kyNU#NhyX)f4<$L$8 z?%mBFGgH;S>gwt4>6z*2-3-LQ48$63G(h0Q53dA0G-{}k(@!oUpX`QLzbCa?j9@^L zHmzc#(u#Ja(W73=I)KeD?lVDN*{jcdLBY|5mRm$<)Y-sZ)}xp2)Q7_Q9VIM%rqB$t z?Q@}omXdjl2RDy{=(v2G@~=9h=}a~gZ(CD+pItf=>@FcYgNS|xOeI`JVWR5RDAlQA z2{_e~_3_X$bJS?NlLI;DOIo?QkXk%J7I zP^8wO?k@(_x~6fFpd*!mZMa}Yln+gD=g&>qLsZw~R@>A+E6g1Q0#OP=StgwlnAO% zFyhuLH(E|IdQ`}ioj!?5n(#m!4)%8T_aq)12DdNhcL9dT_D;=jpK%f-(1_|eFnN(M zLkOn%#widG%-Ry{vBCdbc#(@J_>Ad9T(6VK1VRgzl2x8!J;^h;b^e?|SQEN6{to5c zN!M9F#$>7104sjozeCIp&$aq$&H;g4QtGoyYi(27UFQa6?6_x{KSfufk}~uY{6n?RjE!j!TYM4? zisYd(qunAt;{!!7t8$N7?wy*{XW`J`aDAB5yF6~D^zHd|$jp)v@4C{vP`xmvzxhA3 z=$_5xi;_>7DI|$Fw zsh%ryjq}tg0Zt?IlLX15*-e%&Q7|(k!78;7maV#i@xWo~WE>f0RnAo6XV}d_%W#5d z#M1bgkmd`k#HT(x@K7=8uZ11G+3&&AtCAng&>F^@i6@}vp|*lXEcQtbU2SZp&SkJe zQkdEg``I%4v{y!tSS;AnF_p~cT&T{g%XgPL*ZCdI1SF-V@?+A*SAcnk?arWaMlga!JwI4qWcSGq=j4d1J7J3Fcn2%BA!$?uLHkflQQ3g34iPwdHFhX4g z&D0Ocnr)%c{_y_L4oKL{u{fA{L6YkRcok=L!0ejHznHI~8wQ7glG-(6Z&1h{1Gc^E z^E=5bOho#5uWpp?9j9KA5D;Ep5&qL98lBWZ*c`tnQC=cs1;4DO3gf%q3Z8L0i{d}p zpZrbJTXJ&BVa8;6@Ar~911XEo0mmWuJYL^Iv&ErZ(5Dyp^OE@M5%lG5FWaOyMcnuK zHU|2n1bsfa*@=0@Nul{S6MsE>zMMA^e}z9za27*_q4zH*)!5IsfvR0kO0Ta+-ohwvunt^~T>b9BoK=H7P+t(XNm&5BEI*7pqwXbQn!VN#`5s^c50QokQZr{Us1h*& zEAMd4!kw)02Cfl;V=uXJF$c172MFDBJd^n}Gb9=|g#%eSlW>UThZj<-p}iy0+ytIE z-pRA!8_1-Ex%Qz_CSsOw)!)w9Wle=q5nPIc1%k3bY&pD{S-1h|47#j_vmch+#l4G4r@HD)J&0&Qw9*$2fGhEY|1hhpej9EXBh<9dEMPPO3wR`3||`v2?DH1L4_+Sy)H0%Q48FIL1~RxP(Lzg&Qd4qV7e47!!K( zi--nF3Yl>i^%DYTnur=Tlv%F!#ipH)&E7g6=f(|`KnqK#8z?`_$+=m6K6Y6r0BS1ItJ^5nH;Xl#=#&zyPL`Nw%+ddlTvTt^Hqc~5F&3MQ~ zCbdX@B%1MXhKc$Pk!1;`NVY7fP~ENxi*cdAsHD% z+Yr)nsMQ<0aI(g)T8*@7tcYf;xdo+9BoJv>g6}*Ay_Ce0@noMkv&j8scA$x0cudGG;T%S^$J{`Tr8mH=zRS{{f6*<8cj6Z#0 z9Bdh(ew(VQFPy9xV*Ag|@-d$h6*)V~90c*nKo=1q0>tN6KjhqHVb=2EYS^Y zd7Ib;hVAVi-fiUG>3q(+Lp6B6+&5aK(EO!PLPAsc$yhu7WtDPYBYWzts)^m(jfPtD z7F|4Bw)KTuH3=D?DnB%vV>OPpIto<3u5 zuSHePT6?d^6tY!3-%eI7{QNM(wh)7PI2$632bjSryO{hDvS%~|@Az1;%r3A(|9Qc2D0J5$gY>?eMm2t$~3QxTm6F@0Q5KhIVC=6Xa87-sY=;h(O={ui)Vib zKp>yIsB4Vk9 zgfK8xto+t7CO=sso3<8!tS=uSs&dh}$qNDdcwfkJ!K?O0QS*YqtI~RM+8E}UE245- zBW)py|B(!=C?gHr+b|0HzItK{1NO&+{u2~xp*y%D4dL~y$zrdAd26kaNOI90t}Nle z1_vJ^?v`mC{>kqj-WKxi9}8qKeLt>5M&v{LVVmg5WY!%X?UP~o$f*-x>=ab?Pr)Z~ zD0w&iL!pa59&5x*n1dGyX)JD$F1Btb`yK_fG9nrY5g$Z^5U%3}Sc{fUr+fuFq0Mcp z=Mr3*W(9vhjGiWNasptJ0Ij`H-c?nA_lo}86HceuR@wu{YY#m9_IzC+DF8rpP2%r? zO1;J4DOZj?Rl7k!g~?NN8xnF(e12U22`p;S!CE4`^Vj#lBjsRa9sqbx-lJz+7ZS2# zb#BVYR@dL_ao9$KJ{Og9Zk>)-a!VH#Jbk@dw_Tn9Oj z4O-ddrp|2aMqv^-$DI;&wu=u+AA;CUB~hiMb08~OXN;i~0Rk_RKuQIQ-oKM~=drCw zSvTmLchb^e=H5o+|F}~>JR}+HY<@(M5E8O$b#9{p<`8c{bpD&!$PcY(|9~6L7d-EK zU?M@|W(~II|J&Dhj_J9G5}J)S%S5D}ec=0Ri29Il57hLCN??&!+8MGb8r!!KI3ZCY zhH))+ja034Xh>6zqMbeRP6UL9w=}k{`HRUCNX!(eYJz*o;l$7;O7A^+lICE~aRuxc z5)jIWxZdF|5eRlfK8JR*mO43W;TUF&yvul1$GiSdc={ueG-<}24z zsQZaO8jXly*H1TNHboZTBixqakZa=ehCM?5O!wu^vI57c8K^J$8*ei7pP2&ZpuzOB zgAH$Tk;8|;odcth>Wgk)BIqxZ;BflJwj)Z-&>Tm+^md*p>Eo=xmYza=Y}fg!49r8r zOrV(FWuu+XNAvo zjqw)I>T*o$fDY7;UT%{VokniC&rA1B=7Q2FDg0`L%i*Hir!AYK^xy_0GqXk7`>KG4 z4N$pkvr5&6BQZQ>FT9>_Rh}1Q`&AyDIvTGlgf6I{PMylHn}^aI01IPvuZx=Y*r^|# zCZpHv)#?ac?%Kr<@EM!#;*y9(lvqa{hN)FYr-pVGD13XvD>ug)nMPW+8DJ%k!4})i zcIB79X;$v2>(Sv-(`hRn?Y_64h$AAxnSq|r_eh5kzJP#X;<2^-4tR>U{nIRFI`{3l zVAETXW6lhn3}5Vl3Q2|Z&f?9EvAXdd%XOw+joqkGkQkX-AUy6=lIq(wp=2;AZ9|** z6c2g=)F0K1c?JwBB2#12j?2}MUv*Cgl5sO4}XM|SA zxMKB^{}AJ;A0vQABj`5GG2Q42|H=-wK=H;ssqK}f>a!hS8`jXQ@8b(OJ+9*3+bV`r zDcR5-U|?I_0PuXUi-})`HMkFtrri@$r7_B({r09u%Ap)G6%r*yZU>eEUY^^*S-cnp zKWp1?9Sl{E>jH_7l{kTH9fmjUb zF(07Mb@|u+tW^;H$i0YouCpU>JHL%SJry2i6pNN#O0J|9;PyPoz1ht}C6U*KNubpI z3~OVy@K*p8WV+ejSXaasM`H=1_*-1ighcY&hSTLzqs#t4(e$bonSAo7#Cu3h0kH$FWRj7*-F<5NjH)Of%K;wlmnPYOzv3dTXxOBneu z25=t-(ue3k!=}#KwE0OQe*Pq|@)YTYiawF*V;T{r_qKIa7;a$gB=+z`=)V(}A2}TS z2|U4FRft{e ze<$>lL~oH3wxUHJ?q-L7s2_QK*#5XFZXAcXfZ}GX`{gDH79VoJmFJR`7}#n2!&@ohRYN=;Y?|xVpul_b=BJQ^Kz!PiBQl6DYTyK-Sy_DGsb0*!TA<+= zy{=0b*9eE^=w2%!LGi@c$$yimVsykLbw~fv1T{yCTT|rAuoWMc_c==EGhxyzL%ln< zr%D=ebrI&!?7;zUX~~Id@W%bzJ$UUAIS3<`Ku*ButM>77!OCz+WNg~ZMR?qH3AmFs zSc)EO72(Zq&eIz$v}pqoM_CsC3OjQ6QcJbVK;GYq({JoHjiN(FtEiPbK^Pc(;3~h+ ztif2<29YkiH}c=fST>gl*1y0yIsXZhGbvy@ z*kDKj!Wd$QdOj^p)|tDmARKMn5XP(aVdo`35gmFkY*;hPtw%d&(l6hRXSI0lOBEncw8P^AEUbD;`8MP?)1o5> zvKt@BU@dQ^M&;z(Zjn;MT@G%Z@&3K1H4 zNd}A$_*?oza3!UIyQOEVEO@N2pG%0cV5k##L^eP+?c;)U!0VLv@~P!sqY84Z_S)1I?MtSK+m>cW~_)xvns^p5s8iljWCxEW>_KQp7*&N}|8|echD(+7q-23zCjtIAxRw6rcY|nR z-Oc!h0qcPl2@M-WshcnQD?G8TjNRduDyGwwrr#8=YFD2UO!<@*^YYQE`C4?PLEm`v zWg`a&iPC7PX>D{5<721#xDoVep^gI%7#c!57(e^Bu-U(2f)2rH%G2YH=d%AWTq8zW zqqFUyhcnnr>0mw}HL@Zdp}<6QS0uWTUXPqET>{sLrPk=)Ckdup$FW-u+ojN)%}^To zgDIwe0pe?gmG%f?od}WT)xL%4g3?t|MYV?J^C#HN`>sZ%YzGn68|J@IKM5=HTR4iY zaY6v-a00j8??>Y<8~#JWbASL*Q@GJl{sVK_m?oQ`%Lr%P>H{P(5{oIlUWVozilcH75+=fNg%AYFMh_S(tvfDCKIy7yS}Pujkbwe8}vCYlqYzM6tcbZ)Cr{o%}) z6JyA|T4+R2PAc)=T`6>xUohrOVg=bNnP1^-af-THi4xOUKsF$hs1`}lh~U~_zeBv1 zhE`9u0ZBUT+@;(BbrkYATNlCV$6`6R8x7-KE#r+kW_dR{oFH?!gYT)3b*ZW?r zO`>3PR9bxdW_Gg_tH?A6HzxTT=F!b$2KfX8I#Kc8BB*-=x3uJwm^1?9K~{IU$pWC2B--pqVSlhhDGd)}jc2D&x=X>N`$DkyJB zR`FvtN80v*1D5_CB3I)5_#*E!WXgl~ExvKzwNMR%T-3ldZke^8U>^$ea4HD1K!ei~ z-qRnD04$^Nsy;`(#T&826OqKX$a&9e-d_~9IcFN@+-RT-T?yctN+2%(QmBrheE*&- z{4eqWtD{>tfVJ(*1`%yG>XMo*{5ZbY(&rCYP3B|7+%gkgXz{)j#hWnZj~;w5NvFua z^*mnwT$m%yy>hHg$kTM341&WC3XMcMj04v{-Cd;E9@+zD`Q7PM8kTh zs*Ju7eN~DxlPBGgan`IFQF@3cha-h6X>g|+t?VEqVki##F_@3ZNNQH?trvjlKa_ys z2j4Zt{qv;DM&C@fphc08s88{rEYkCGA4%bRpO^9d zGJZ~5;#Km*bXcDDEavi$qbD#6A4XIUmK@mw(c347FLw+o; zO;A~IG%UbJkRz%7j8Os|3YSNuC_qL)=)*!l!1?!2;OW5m)z!MMumXNPtjL#L&8 zM7}hWui$f|DTZWg%J}fRygUhEYz5Tgq-5qabXf{W(kSJ_+Bb#KrfJ5{yA3lD!_rwX zYc25yOPyA$$Z_GAS-JbHGN6sZ5@si!t9hf1iP&PkUE)sx3E0%3P${QN{;onL8nTuZ z{5(;=byjKN%G(IA#!hsDo>7?SMvWHMf;rCn1%MqVMpdGwojx#RgU^P0XPB0K@qz*T zCi!+{l~cBDDBY1I|G~62c0M`c7KfC;iCp6(AA_SqEPeFv(GDEQ_Pm>soUFyHdBoO@ zBV#lZ|6SPwG>-fcniYp|&r`sR(R&wn($NmIB~ZAKP`%U0nhUVsNy^(2lAf1E@fuaAMAV)BWc^}r{F_C}o;gLNlGzb3G~WMG!i|m41c_WpcZYjCqqkLy zt~Sb+uj!IQ0|qVXb_D>&eUlq4VLdeYg2(vBM9i-qdeznHcN4bq-DkF1OrP=2ZjVhd zKQrfM2k*o>k$v`5ruv>G^`W)&U@bklC{TBTnwX_0W1zkCER8k*rojVAZZ z&zf@lNh(ndH`71`Cd+`0te8=RWbvsF9``8mLm z9H1LmUK@Iqer{I)5&F$c7zp`Kd%KsXuT+b>aP>1c;nj9+7H z=C&6I&}qe=zoI`^6;lPN8N^X|sH|m@@VbJa5aJVqk`lA|>?=tdthn6EyB`NvQ?NV4 z_9w|6A6#g40-yA&V{+HT{7kXG(^(w{9iG-a+b;j}?Z=>-(fsa0*j%H){Y8{@; zzU7oKFkE7*`B4A z{IftoZaD#K&B_cYdm3at%!H+C_){qTKwzOG}%yS9g&`W_TA)c2LsU#Gk>GJ)MtPZDVPcb6M)k zJNNyZfdj&)bFFD26f3G(%~UJ($;EtF46V^^Uc9=Fzh8wr+B)!g@-Z`>?pwT#FFl!e z2GSXgyrJfHNzV1lg|0QOzv9$f)qS zxmpaYOs)p7p(XF8nFrN@H+X3QU#`aP95(fksp^Y8Do}OvlJ8v)nnz&l14@Mv@ti9k zHJ=JKzDut4h!iKsj-0F23Gq_3JFeC(=hXNPutQ%r#GBi=+*nsWda;0HPu>M@KCm_W zzD%O%fy_CqNE)D6*wtW5v6&@gL)nBbF1AAy>!Lp*JF3G)pNeul-gxaQ@f*^~d|LdL zbSW-37T`opQ26n%5wCn?sD$0Sp9fDuGgQ2#0Fp5NT&uyDm=0o${sp-&`pu* z`&sA){O-uaBq*QQa)Py;m0poXyn-U7t1U>oV;L0pXAT@aJ`+E$*%aO|&pPIAUuz(( zP`Se7Y5z%oNihyCRVi>o*HU?2T-K6ETuytEcoAL9sI^dUlHFr#9%CT)kVvu<*V~$D z`$SU+9QVipQg}?PIYtzp@~_wDMcax+#6s6+pB)#Je{8X5_%G{k?y%Xd-%8GZsdRbV zlwvMzU!a*l()3t*E~U(0GIzm`{*@-l4f~F_?)hE>L&nut#t1x8YE#>^Db0 z{h&3TAxcVhM%5SptH3N+o8u1Nk`iZmAs5LhbJB-)OOt3er{KfieyC*>Uv*|>zG_2v z@-lhg)!qx}2Vg5I(K+S0Vp0e%8h4eQ(o>0*Sn-r)i92nr`SE#6gKtf{ z;pDlM{9jP0S)5EPNj8`lvKpd%Oq`&w&$3q`fjs7-{<{L#%PWSwEWa6#7*8eS9OW+Y z@}Z4?IhW#eTppc-cJ3dFbKVuTtp@svwsFs?EMMOH+hLw=tW!-(kHWsdgcd?XlWvxq z^24P$?=H`qu6g2Bzx6RptWoPI8ywK+{Mj@X6-xsykj*P+Y%Ghe_&)ATmy$yB=)YNm zN8kC_&uD$-$;h-_&OKgr`aO%}D&JHW2jTyo5~Avmsb#Pln$tUMzy7YTGPzpB-Y^fp zgF2empFiPc%8WG@v1nO}>76LwN9xEXh>cg9pQ~L<^l`V6TVO(al+p!H zH;f36A|HuFPm+n4KmRP2-8;mG>z0zmHY2x~mK*_)=!F$XmRPTCAYu%?@vg9JOJ=@7 zduJIbRgd&gbYYT_ie@c*W}gdF?!C05>VZ?gtSs55H!Nk7vd%S#dfrl}S(nn#HJSHMHodr&6%F)QiU7*lJ|>DG{=%eWmp;(xq>ba|*jXH$Z&LjOg); z{j3vry|u2a*XH>f8|}s}u*bF&h$e;5_big;40ry4$+k=|whF|6ZhsNTu;Z1vgdzH# z*Nr?b*7&>;oV`H=IMtP+R^@u%As>vDT_r{0HliEhU8$ghrWWc#;bt|me_1}=2pkY- z@QL6gIB~~SHR7Alc5v%M{Lh%wV8{U7SkYz{s~Y1#30WD24o&+~-lr#3J`QA0QHdM$ zRn!S_#y(*!saSugQT|$qAfnr2!CH9h5eDi|Nmi(iOqX)2qGoAZ#O)}paXZ`i0NT~u zWh;5-_Lk_Fhu1!u-d{D@I=@-%FWPuQ5NYZCPSda!EEF? zOYE9*kH!fNSe0z?;TZltkj;X5$`2P~jk@B%F+s%dq#c90_CMtG{ZPTK=4jw??y^>l zWb^D?yQP8GfyTBxxsvXk{U4agzXy7wM?(5+0YVTAuiytqZRF!UPmEE9pI^EOnl)8U z5tLga6FqN^c-sZpLg%_(S@#1zscd!n{yo$bD&wUarC#}h#?@5a@ge$<fQ`heVA!e7mh^;rad@r)2P$1y=yu^EGg>secJ(KblBA+GdURCN~H9YMF3#_ zk^#YIR=T4MjQYkMT}l`Nk_9Hu!~=F>u1&Hw1fKs&b7S)RqnjW&zmAQrdp3P7HKZO_Q@1ipphIE6RR$@8nd73#mXWz6>Ogf?sxk_C26}ZP*RA~|y#36|(qoK}9kizSn=!$>{xHdzOF_Ihfr!Y; z8n=6BmzrL^iEv@6Od@LVCnUsR3?e0ibDbxtz*j|Sfh#u$Ih&zi_sdXKzfIJqfQM00 zf9Qv{C&GHLNEaeXZntpxV#2m4EwsmRNdOpphIK5AE^-1Qi%V2cl*?rrTRIF8u}a9RZ)55 z7FvBOc%9Gdy~95k*r|*m#eU)@?3dqL;q(%tP`xsLf=;;g(E=MRH$$}_=Q3;(9ilEBf4(6US|tZM$V#p-tGB`nS9#PWB9_RUX&;|k(SJKd?H zl7ml62XJ{!Oam>o+=9^Fb|?Y1PJo5pT;z1!=omJsxFpZM7|AVH!2X*Cs;^wh$&^JajntHWghm2I(<(ILX7>dU)Z^{b0Hq(zTJ}()T zzftlDtTYrAO|vwS1V51XOU>1N3fx4w$Cz&0vO!<^{Mf@3wSsGgs|S^#lG`N{7XT(i z7zye7F$@*3VhxkZbW>@f3XbtMcL!=~B_?8cH?1c)b{<+2Qcp@|hYy?Nny9=4Nk}D= zr;wF}pNBF-*uMsw8mBP)A=e?;;FWS+R43^|sJlhju0w4AhLQ&MXmQx3TJVX|q9__E zG=W2Br7{t386A#UpP}2wslM-wc--LO@~c}@%2~r!j9(aONoB7py3vz~NotBvBBBh= zg9u35Us&FGuq1RnATKhx@83YXpbcd!q^nJ?F=r0ZSJT1L(hUC)Y9GLkMn&A z)7{yd-TB~hkxQb_ZX&MH#t@fVn*ZGK6AV>>^$!w+h$!t!H+^dL1X4_hQ1w1AQP7&| z6CTdln?kqNxF%)T@dyLsADi#e%}ZrL1g7qfx6|(BMs;_C9ed}_r#K7WIm_44BH!32 z(Gv_XBMjJUmZ?S?>qdMDM>}e-+s*aWB^R!Ds)TQCN&EJg?tJdArlTm5 z%T|cdv@HYPw>>@~orYt_U_p0LQ_EF3v4hrZ1}Y36cB++uw`kQS`|=p8zo(=n0Al1P zdjc#@2Yp+1{^1Zt4_aC?mwF|w^yR6MtNh;j{M+yiXqY0!U_$J;j-}idM$`;G z9I*d2`!#x#^uJ1P<7D(v|99Q^sgnQytiknC)nehj{}sai6>EM&`Tyac6Zljm w5xo-JRoN;3%k+o{2zLLF`2P>njD!wVF+|#gCsk3THMs;~H3rld#s47w7eSN^AOHXW 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 173/336] [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 174/336] [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 175/336] [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 zcmY*LgX*_GypTYnprvZ)KCFx9I`=%QLQ$BJ3!G{?;T2~k&{vB zP5&K-B>;AACh0cgebs{_kTB#z1c^eLIv!}`2y*qdpc_@t9ZZzJ?vmvcc$?}zDJrzo>!x7uvw|Nfa3VYX6{;-|)_hY`Ze5(Y? zCTPa=)B`}!@UHWft6v=%ka zKFGbfha6C5s`$#yP$Wa2U>BiVmCxBbOI^0<;lD0R=%?m#xj6L>xkg7=zP6>$bA_^I z)y&F=nXq%2)~oF>Ze8lJ2x1Kl<;XayIC$+L^AW@LV_%E<$^F`#<#f;1G zMBxTw2S6U@FhrjWQ3_zU{Sh4e0;wt0kyIojgX`H{?pr5zj03?#_N4HdI8eFaP)Rta z`>;O3z$_lmpR&g|&+@x~&oR2P%Ek@!A{NhId=S zEd`rvS+ylC4C~!oZSLac^pcx1v5Wkz?Z$V1!q%?qTQ64{o zqoRL=74$?DL`ylRv-G5BtPvCz00~a{?KQKwRd4*9!GETITsYI&%dpBaoy|)!CHX%# zS0-Ce;&@ODM7p@nJ-T172$#7$f6gf0H6+&6#~cqd`rGods2(uFUTpvBWj-*rQja?g zW2(9Jkb(yqA=G=oU-o0D1_kq;FAUa!+lm+tBC|(zhJk>5xOeKkb13WAy^EcfgR{)*`77_I;yZ z?BI(4^58W=K40C+;*f3>nm;bn72g30ov=VBVY|rz^ZfwjIl6^Xs@d88B2o`87}%?G85T{h}f`t-?p0rSFI^Fz@d$|LKxVHsWc89bZyHpJ3D#Jxr&F`)W_#68f)U zo}2kRk?fx@KQW~!C1EEIwO(jNW)wS8fwY(cpYI;>#6i8Fm$&QJ4e|F=(A(qhJkxmDB&GFjpCmq{(kxTcg0lv{rY*9y$mD_dU`vrLwkJ)Q|*0GdVfFl zYs={kcwKpLGJUTsd7n?q1+FPCCR<(hoVlcZrwA}lw#o}wyXG>5Sg3X$&#{5bh0ocP zgf)H9m5?<_@|2=p2ta{7K+MTi<29c5HH0m{+R-2_sijMwm+3uAEo~p7wp`kk`{PXg<%rXG zKG6_1M?T+7%hi1djH+Z`NEa@z^GoJbz;(YhC9Wlra!12sCNu|vqb*IJRMcWY$ zyZc>J?X=ptOiaaJ#J@up&2T1h&1zfti1cUYrPBA%FM?xO(L)p;Gmp~nWluxI969={ zBJMCihNVY3ecvd<#zi!k>d=2GRO-4+`Z|n^F_%sij{&RZ5yL#%$x0eDjP1&|T;+VD z5sN@xo@>=&L9|=Q>Xr2m-7AX$v3469_X@VSIB zko;%%F}Pnk0oD6Qx%FIr0LtXN+i|BDL*SEP)RFx25mvy;OO#n*KOi(h!s@DA{C;?q z;&~zB#EC-cR=VY_j8zmwK(ZD@u7#(kj}2R3DEbLiowvash&>G?i~1CLrJYJ{sN5}5 z%>cY=w!~OdCz${8RFSzaoeVCZXQrrO<-Os^2~wfkG`pe9FWXK7D#|~6kBed*Q7o=| zZRYu_krCwZ-9}DAo%g-FsW{2Hu+8sb{loLVcjGU4Oap)dU!)xfCHiYO*H=ZFB^l1j zWx`RjmduFwFiwi3VTn&xocEGad}g+CDs3cg^0#wwXyhuFvZ>jI7V>UNroOs!4QAaN z>_yhJl&k6-l3$CO($t}SB|A4sY)ZL}FX!71pBIv{g74~NqMU(@t z6nHiLwLT0gFJ5#pmxyjxB!BZhr0GwiiV5ZY>#eU$Dr^trWM;DSg7`0ig&m4D7PU}$ z1-{;LWT27rmN3eFl69Gz$)wHxQBwZhP^m!vAt~MxvnmQ?i5bWGPkEldRo=)~Nn>wx zFgpm`U%jM`(InFpKHdthjyoA!4}W0wT~$U(faWt|*kOB*uajw4)0~e#=VL`1PJAVy zIX^S!A{Lp`A_z?_d@K#+Xymdf0)C`9Ioo3(7Fj4|@39$;Do10HU@ng7mw@znk8q`?)!;C>T9i`j2$EONl^jNg2&ZCS?VB*87G)v8_Ot{BXcxk z+WKVgW`)lmC&0l!XE^CoKIx-kBExA%|H|fzJq1enovBDX5_o(@#f&I&9w%BPF&*|> zrt?AU1Q)tSZI{sZ70JU-&OX~mVA5y!87z6;UY_Bcoo`KaLiNuv)tVgYI--vOP2sZ1 zH!vlsTgNuZqufx5;2Xx3;^FD^W>kh%AG{T<3+9`o&fG3H2pG`krW=eLG!?lm2`bC9 z0!873K>>QMx*LxPP|}J#Ll|*x8?kjZ@)NB-?NK@KnrSb_ifSvQeN(hznkIBg2E9T;4p+Q^UzF-D;hnsbT zy53-AN8p<131GtxXBobj>foRqzq-gLSSKqwbyqsHV-b5EIcu zmQeX`p1F-i$rES&Tiw%Xkme_x_n2p%k*bLq~Rkn?~TUROv7eT@F7#Dey%UA$wMMjD(^gfVkf=gcf%K zi7$svjcO|{&3#w!OGhQ3lVP9X&ojFXc)KC5<@sL%9*={~IuvySZ+G{6R$Tnq30e3* zusw_|-U_BM)8DXD)r(ao5LKP-h={O(YDfnxW`Yy|H7LEST*<&_m*! z9f?4^eRIFo>*TbUuQjtAASkQGU^BKUh}hF7q@m+wdhiz2n{SIV@$KSFRsxIj8`1jx z*c05Db5+>3UV-p6tI^KjljGQ;^U_yJ9)zUg1c%-%T01~7Xb1-lNUGE8b8HH$-ifdm zX#+r7Fh9B%umb=?{-YaOaw4bK@6%Ss>WEA=qf96E#A-nROMxr^NL&hg)6%FPyzKx3 zr1Lmv#boB^E{iy0m{D{@V*>E*f3F7N-u^06ywm?38refY`4pUA9*}YQFLacul-(`O zO#!@ko^A*XvD#Z!1QWqkvoe-YRJa*sx4KP&aH{Gp036sSvCR5sFS<1@Oce?XTL49g z#@e+_5MJD=1gVnb1;I3D&~LIP^k?d3<>f&fMP4@PM7>LBeUi~JH}yf-gJc6pXutpsmxsBLe<5IiVXLr_5KT}W)KOiync+bua$tAVnqKjOqD7A2-BWk}Pk+>t zOl5G|kUxgIWEe6oySMoig~%8eKckv%QyfrvB;Y?#!WU3!fE{POaAnXXNkKM|=(OnO zq&EKE3MR1Xeh4lv1yopgd+WjfNyGg|Y2`$L29LP$LFvE$$`}(?8pV1LNZ@Q{{iEJC zGqNnnpndNxd%n2GSISeK)xp85e<%V2uErlYkTSFDZ+yVtOCS#US6jMaap2r1cj$s*h1Js}W`Okp42+R`T?dyUpL= zURyRirt(d2aTg#wowU>dxu9(!?FQ>=?d%tm{1AYA6L`-fKl$9(bUh=HABcEo-_}F( zdyC^+8^myRhj@(SLLKvAa#s?>-k9vd23=S{#o0u>=y9O@vB(LSgFm*cCf_XxRv+)U zMU-mS_X=o+6*@9=`i$ry+WX37_=jk$L;B*6dBDGu?rBK1jI6Z|#9Xm)+iWVAMUFIJ z&4AGr(eT^Px9tm3LWh{S4^-!-N~At-c;`H=U|-?<0xE|`T`n9-U#D`5)yZJ)=xj>> zztzH076R2{2*bShuQ8-p`T20enb^=HE_zlQR2Gnn#jg?g)%M$vi&~CgK z{n*WxxacNZsJtjSsKT^$dVAmC$ma${`yuYYb47Y^u7W({BS}!baMiWw;YIuY1Px^~ zoVocr)l+Q<^bdKJY@150?rC^LNms^3M3VF+hk znTU`6m$75X9rh#NloeB$UQeAe==D#VfwJ-#A;d&SJ-YdA(1k;D7t{6Oo=-vkS6m8d z*){|#c>qgdAIoh}(Y|@rg^pLZYkiNcc!KB7Jkv*S?=J$_^brrTICxF4I6W65?cb<3 zDaJ4d$xEc|cikN9y;n^IY6M=1q76b5c>>gj{nD&5LdW~41~h)fO^}NbsfAr9T}YDp z0V62~W3bk@KzTOAVdD~^9Lcs=nA&J%_?2x%I21xNw%DN#jlM{(Vt+0XJq=z{PGL`jpB5!;XwvyqdCD3w8Na5AKlJkLH6-^QF(i7c z#AYMc&ad%`np7P9Sqfjg0Zuk!<-Swjsz(eISSBDT8?bc3qNB4zxUO!=LirHeG3rmg z{~VA4@+fGz909pxiMLN>79-3R^c9QYh@wzYQ2uDKrq&;UzoE1byghTZ z`nn&dp~W~3zq~|&oWO7UGd^fW28H4R>smI06^0*+)*jZ@ z59o@ejH(OP$VEs{oMl*;PW76X$#4u}OyJQfV^z?m0>BQ&H6lmPewRVwMDPQAkt(t+U_>OBHaO|Vqm}>CO!sg*47Lu5&JHpY9o=JHlT0c_!6_E5rYu0%Tp%L> zMYrGq>PX@-x7f+{pWkz9+s#QW zwu@DNBOTf%e)dQM-XY;QEw@&YQ44uBXJAbq$!8xrD@6FX5JrW<0kV4d=~R=1BOj2c z;Udj(=QH}VsZEBQ!G~1IvDiPig97DVr=O@IjbO)jq<4CnV~z=}56V@?q6n8kwu7|D zL-gP55Q@Lqgpm!#1>rKCilNcj6h2lqAT?)<{;f6fn5&E9C% zZAfPh_Q{em_|Qu!8gee>TnS!LepZz7s+MdviajGe4X)OQ(*i7m0}zusvxgKGb&+ z(<(AYevT|KBct`9FPw>f!a!fjfHANNbBc|Re#Pi_jZJpPI+fE$60HG z8&{EA)y%=Jr`{ZJTRe4eZn#ITQ~u#=xh@;Gd=*TOK)(OT-gK z(j|`eCmqaj*|Gn7>3Lxh*|f^sSau0)vjDZVY8ff)#| zfU%-vh{{kfCjyuk0bLUAr^#V&?yNnyjcPSRENiWJX-0UdY*Ri#Asm_Iju#y)VwC_J8S}px| zf$c@!WfE!Bf!(d3-Z=fdYNzxC0MVAHP`fFOAa>zNe*Y(HL7DXNHMvfr*vbQ$h1%Yk&5wzDfmWW$B2wJkgYY&--p62&kuHcAOe&DEmOn}Y|6 zlUeGh$%n&kX`S@gRjuOI9o85GQKf2WR}>4$kW^idH~|nD`V#+IF&w!74Q^r}^1NVu zYIHhaP8P0F>=ca-aqK3St4Q85$ciTzz8!xtW+9J>j{7Wk$N{P47DQSyy3sdUgSM#3 zPh57A{Su5w=M! zd=(&VOa_R)MGSB3Vxp5AgZkGW+7)ML&Y>#&?Ms_mNW0<%3$R29qD+vJu$9p$x=D$! z;C=rkAs0dZn2J@BMS+4#D@VzAsy4c-^u4j5jG`_vnGstIX~*ggo~YM|s8rURS^)?K zg5;tw?U8l4qFEEL!E0ges38{jl%_?;xRIC1Wc8&Xg1(4~Ap_MCLtYH!N0oa@sW_>P zB^-E7Z~(s3L8Nh1;mW1~t>jEvrKqhZGAqQiP8TL!B}ztXM4Zy)=Y1d|ns#em2MW)K zHPJ-ubX#L_@pkWxIiaL%8@+WJU6-jB$hk+)U<5FtC&Y)+LH|6tq}%F@Jz3(wG=7I{ zZHXjlLA(b|G)c9>qKA*aUV2C>ZM`S1&1Q<4W4ptWk?sEIf8OZpsXILB9n!=5P%dym zpkR*N^nLPD|8IgyJRf$lnooLcy<6Yl^J3r$BafpX-~<)J2dOdsu8pfCtVD+igeI#Z z@siMXP>I=$g!Ca|Fak?eZpEd8EI*UU7>%2On^=(2t`X8RiKU!a-l|3YiBvdJ>)dcX zfpXzfBG6FL`sc4j+;shkg2r*3JwOXj7ZIbytz){pRT|YV+yLTJ2I*l4eyeMV7C^aO zhX_>|8N0*@#+w3+;i!8$?I1A#+O{q(JR~;wwWe&K11E|7(LqErmmqZ41b2xT7GOHyX|K<+IiqXmMLt}ub| zU|PDI6)0lOnKDmtW3YdiDNU;aAtYLIr`J?t^i_CW@}WUFgGpJxq@5Mifm0S%GR1^8 zoP3U{adKG*sU3S*#bT(QTV5JQRiwt-SEpnwwfA*hsgK@gu!=fOM6+^Do!48&51eV2 zm-ClT^$L6o07gR~#4>{3*=Wa>_Nq4+4Ve#WCvKodZRoz<%_M;jPL$*pL&yx5I!);&vlZ1 z@4Q~AMgM_K)Q<=Up97F6BYXzgx@^52I5EmA zJl{gYWg8gs_7|VatIX9A&Q&Tg)=sJ`1Ru%ch#Q~`P$h~cE@1cq#LUedj;kLUJIO+I zvZ~M4p>rF%VeUy@rp3|`>2Jj&<|Tb9%x-Q0y6dH{q_om5`cpU6#`l|PaCmt1kB!-Y zh-z3*u!o;-Y*@UU(mLa;=p_T?G_YM85i$@EF%}3jG)KD0*TLP3P`spV8$#Ib|l4;oA9>>GH_!}vtpLu zpBL(z#Fxh$VNuYE3xNn$Nd=yuQmq9Zmgab7^tbr84weA`YIA?#hzcsW2!8%}Yk$S` z*E%Ut`xdqZTo9I!ys+hc6XU{CymNKkVJ?ckZSnqUpUyX$?#~D->*V{aN}vO8QWq7( z8x-y@-3Vcp9y=F&Bd{qp@UMeb=H@yQq0C&`RjBv#)u|ddbV>F2Xt!CY0+#w zCA+nBmcBUP&$(!SWiJv{8snTKm?y4c+L-;@q>G#mEL%LL8;P3dIg4!tb9aq#y>wC& zcuo6|weG|`S@X2M!PnYhW6(R9h#3+XK{m#RE<-06b|v^ITgFW7B_7|pS!dDFo}=t+ zcenyy!0F*x0CB^}9O&cCXS(y(O+(bL<&&EZUc<8id0p?6ZJ{Lo#A;vtm-=*R1d>7- z*eXf!9^te85IFF#5nO6un_txxm10vG#Ta`x~RP|*70~EGTFRa1H zh)s+)p}vzI>l1sMkLhm|)P%Uq11#@5>4e`51fa-Y4aoJl`7b->p|yg0;$A|qf$9*U z9E_{LSq#2;D4s7jD=5K#@L11ze~-{@Oi8@uZewnO-VL#8=(pL5h*R|KZ$|ifX(v(3 z^lcThskE#=IESr#>oGLDmXpebs4I`v(M}YEJH2~a!zOl;TtjoQrKf^X%%&dur^L!W7u}OP3O@n>5&>ttMeFWv86z*bVJzn&^2Trtd z?U*^+11XvUVmf1cM_B_t#?`pGb1civKlhY$3@b%vqKM)p&0uL_VvH|yFozr6VyxW! zHB&wv9bE>-gjX?sF}6@;4Y5B_7ePnr=#?}I_|E=~R6>CGdCbk^2(M^P%5GsdHKX&V zMf}WxxPqz?MhU2R=Z+yDaYXX)Sme#j$e8PgCkzW{?kX|ZX^uIw2*fwJQ+leJ6b|tg z1jw(@ekfaWC9^JCa_wd-bs?$iLCejo^S0?o<4nE+^87^0Evo$dg8}51dSt_KeQPoR zb58YOD-`e4NQ)73DgcnT6ag?CoU*bu(wZd5Ppawx;ps2dzGE&3DB-*}w;VQQ6l@|c zTSC30nFIi(JDSu&zSKhR=lU-n{`38eTAE(?2L=EGW61y+<)HzMfw0__FuF5ovm|j= zzl@Q5Wa(qq&&`=mx+tX`acGooJfDAq;>9?OQ^$N_5G1CL8Mf#?wa-!7MMXd@bN2yikOEj`(=eCA12x(=Oq62PHda7h9ys(%?Jx&BYZBiT@K-jECK@SVLHB3D_fZ>zs~XF~WaaKV^Oob9pWkZvoZ_}{Cq+)u ze@iJVo)Qi`8rlzB2XS^|v%2n^JFWBRl94BXUQeq)&dnib2H!th(f&CY)jhcJYE7(M z>BL=FBNa@~+N=@Ry7+Y-H=YHEX}3liXi#k#qVhHcprC z>L)*2Gw19S?nGhbE`M3{m!4yiTHOl`V-&g+{)htu$`eN~0grF)Mk;Ir*L>WJ;hC4P zq)yQc!I3iwHY|I%H=3l9>3Sv#Eo>>6O2XlC%0+zFm*bQX@Awymaq1;>DcSO z@So?BZte}NvE#vH3LC2r=yF@SG9U#;8qhMXO}zH(RxdAP;nslP&nU{`Pb&uEBagcNSAe+Zh=-Ese0gi+aO_iK}{7f`^mq@vyOxwlDi=zb}sOH`vqEL~+U1gyA)R5Q7Y} zQtcpnXHo|kRuAU(6?*x?jVW=o?R%Xf4i=}$3pa8I_;O!pT8SN7{ErMaaN>^7oihPl z8Mg`j;3RlO+=q#a-CJv#C(C5Fqx94BR}#@ZnpyZ7QQP9&&<;~`4Y`BZa@yN$_3$P3 zIr+_#@aP=G9~%sj z+2Hl|4`D>fO*)1mU+#UYfzPRo_r%D2z*wm! zIB4mOX?D8&SK&+hj2O+U`38N+vmgcgUz`cp0J)u#6-sA`27spz3|->t01jtC)+$Ab zasL-FzV9aln2?gh`7NEd{3+<`k1y@ zuH%&wSSzD62ugOvG*B=$BvFV06n?a|f^Ga+PnW0$^o@>ola%@~oqZ@6tIt_n-P+iH zGk*ZJb*PbF4o;91qih{*Uc@ViLgc~6^y7~@+Ol=Apj}nIr9NIAOb~5=K}rvJzJQ?M zG$|L*Pa|YRz$u3I14Vdvik!g&E;_u-{N@w=LJi+Ozk-trf#U9S6z&}gsGkmq>8M2P zfJLQ&t*Pj=Xn2Aq4#JI_g!zJ*C>qq-|5ttdDn1zt2wXYlw^NhY5<6)vyg&+>=d`0N z#OFK%J8J2iyzPg&MiO3raJz;Lz3XxuVgHLqLsG0E+bbuV8#W*Z({V9U2af{K7T-H1 zB7%Jnt8-O}+VR$vlenY-0q6*m*}6_}IwoI2)5Ik&^Ebr^fj#@Pc!&>K-V`ZvNNM49 zK`1+kRzem5b9<8X;hzZ&Gup)KX-Duy#Lu1+ybThLTtw0*UfLuAlF`JZL=oh`*F11! z;4l&C0RBqYd$%rxBe1G~8DNu<{vn9YL{3R0;tp{;8(-#h2Sm)}F3DZ$Vk+){&PcXI zjC~aE*alA|ytvIQe~0IP-EwuF2;vQi^mh{8q<{UhRYs-&a{&1w@)2~M^f5>l1_8BI zhWz^H)>xdON&l3iYdKv=s=yqDSjbVrooVi#!0W0dCn|q1$_}i{dtOTa^=$+K<>fr` z;^{k24B1@M`vBi_RGIU`wLU&4KB@OF`aC``Rkf|Rb}_zS$F*jWv@vMv&`mu(T;ir! zTEPFxU_L=iDNgR4(gkD}x6fIFqFaVpBEd~9Xzo$at9{mxx(c0R zCB_{Ot88WmgiOT6=4Ymf_Z zDp0@UhQL2Y+=nw^6rpo+qNHSnD7owqdf7gSCdSOO0(rSo%K|WCqPu<3aVNV~XME0K z{jn-Z)I0y*Su`i{Gbr1Wb+*$vhx$Ca3NAN~=Mu*3-`gE|#7drPNlcclwf?D}-PeC2 zI>q1H(4iIFiXx(qJ{zS5Pq5m3B!r0MeVozT$dhwP_$;_jP|mQp)bL{gb| z9b^kd1JzD%2?}*vE9WRA8wofctvUnN;oq1HeA$*Z#(Gs}e2&Wzub{eN#qK72c< zZasCz9p>u%(i-Ojp<(9w+S3BzW!HLgvYT(xo2oLAtt%?c`c^hdVMV7PD*y|YfCHh@ zGn$3aXe=csM&s+oPvqHh9g7h>a5Nv-gs4MwPe;`*-+k~stwq%ZGnsT6cmRCIGoT+k z6nyu7XD(+~^gjmLh`^n9TsMloURACAl|Md=(5?KQRa`dKpf<-yPA0+=><_|Cfu{w2 zvX2HB?&jHgdXb`=cYYIpENq#?e9io?l*tijT(x zm?x$ZI%kM6g?aLW@i%}sMj2C9k)$K!WyH$P&4+7aqcbs6urHVi^26oxOaTSBdQORD zv1N344-Z~mkI|{)aS<}61;udr>QSRGha;3LDq0p1_!kTz)`6m@O(qWO-h%F<$U0tk zE;UP+1iiwKm_J93_Kd>9Anu{o!*NpjOnYN6$%XWg&m7qahQ&P%T#Anrbku(6mS?R! zVdnfACK;5jm87rS$H*%2B~cHDTPks4kA;HaA$9OzB>Ts~grWd;Q_S_>GIM{FXEt)9 zjh}X+YAd5u-cEYwKiChB2wUY^W+D!D$?v~L2P`^C{ftLkiKpL=bm=VXjgOd_kCC}} zgKyfC;)g{rA{jq#B9&o;1*s2G;(gyyeZfS({PZcu5&T1W@ob!qe#XXMx^1KKJC2#> z^TUE?l}TgzRo@Y**i1K7)}@`l0ntftWV}K@a`ARXB|J)e0UTh$AX^6T_E(5w;Y-&X6HOWGmgIA8yvwLV zzn_cqHxQl4Cgb%&Hk8Xq)*oE7wihBsm*DVe)k@95VZcUeCOU0j?q{2( z>@6qAJ@U=tRj&*Eb z{*P)414HzWAo;(hjRtW+BZ1VbGQ(vsKsHtBNdNb&0Rw~nKf`|#Ejxrvje_)lwIAe@6R%)!M=s 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 176/336] [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 177/336] [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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
*y($)p=a2T$JT=6h zs6L6~yg~0ZMApB0#sA`ITwNyz37B zDCH7$zRQJKC+{L{lfI^5Igyt2i)^b^Y$cj?!)9E)5P$J+b(9M;^?J__y+Jbvm@uI* zaH-p!D=bhK`c#?uQy92IBTpK(tY=&94K+esN3$6jzP7kOpr81!W4-v zG12IPAa~fSbE3twKbGnT!@~=R=&&j-z}(bYlQ-CLUt5Y0r=thM*t99(uri_Z_E25I(^$X5`_#xQVp45ZoD^uYXPc$B2=68IM%M5pB z5g<0cUV5OJ5SHXEfv3F4Mo_lw#%NnK@7Bd%>PlDJ4bIK1^?uWlCY1aeA^H{kGPkJG zsD%^oOWl4WczSNuk9NdzW&b?ZrGbqo`am2{*+vSFbMt_gw}H(pPI+9@5P^BT97;SZ zu15CQ)V$T0QLu`=U~}Uo|3n_Il@-|2&16~7C)vY6}!59K4f=Yx!m*e8R10d?D!Z!%4^WcLsUM3Rp$A4jlD`q%S8P!K`3aHWln?NgNib4JsV$7h8)M4_bAVj zf6gij4+QxOuS~lduFZxIUyxC%YS^-{Sh=-o>19srAs$e+?QQEENAzdszk3GQ2yKXS zYLn8nKsg%910wm;0oRgI7D<9nC>#BhjB);-2xnPC4;`AstI5akzhaGXG&Guj-Sq#C z0XWG8OqUd=$&D_Z)S<~i|Nl4M|8pHly48G+{wYaJ3x>h}B8mS6ds40zH@ZsFs1_W3 uIf+RdhQ66(sm=R8l}$>}ro_NeNGjKsMvqR~`Day=*mO8>-e~+M;(q~8`)bAj 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 178/336] [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 179/336] [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 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 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 180/336] 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 181/336] [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 182/336] [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 183/336] [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 184/336] [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 185/336] [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 186/336] [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 187/336] [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 188/336] [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 189/336] [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 190/336] [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 zcmZ8|b8w$Q7jA6ZcGB3k?W93tvr(frwtqom+qR9yP8v66W8Z$?y))m;-9L7AW}jz$ zcF*pf)0+q0T?$^O2@B1iX&+V%(t{-ezB*;HV)^GbeFnTK*TaVe$X9GuXq}eWUaXH! zK-21i$Jm3=wBD}-Xs8X-(ki}6+WVq>OncTG;Tmf3f30asaE}_pmqw}ONRRf;E->~? zyTs#Luj98WuKE%6U{Dx6zQS@OP|mHQ?nney<{pJ$mN9herhOfC!m)Nuz{yw+Fj(%C zE$295S+z6s@@Snr8f8L8>``-w8siqsLF%XYLDiVr zE^s^2RKk$uNYYRBz)C5nQ0tuOGdySpZ4l=xm+rvts<1MBe1q4dEn!HcFaI-<1>WRI z=C>!(PeOhrKASzVV%}ZLtx0h`q@Ue23OSR47D;bm{a8!Hm4UIE? zTtBTTPLfOifJ+`%PpAPL!rY>}jP6ga#vT=V2_uebCvKcI$fD>ue+TEI6sv%ar<{xifpxyTXT+*8#xh{RC`c zCd2^$UwX|Mv4_}bckmb>l2n)6e4AZi?$%e@MiDoW5UTzP1}c?49do60f6iXslt8Ie zi1G?m{{0Qi_Wg3vZ`#Rjj&oD=_EDYC(pn`&m+_Q=cA3$s?PooEFw;i$jErO*=^Bfd zRZa7WXQ>thToRZHB@ryMQCt~eOyCYL-t(oP?vnz+7u-qwX8Z;QOx9=8?_jo(v*vi! zsTTdo?HWuQeWD-ZIvgeWMJOoX#?E%%E|6Pkdci^HB3O+q2pkXyoZ5(EKS;sAKDI&j zNX&p7TtwYoS%uQpxhU`3%2qAo*@z zbIDo?E{Vo|Cd(^W-e}bNE?9pHMNCQ|g%$%&6=-a|sgUl3khD^R1{H6rL)J;i2^cKv z{Tp#&`4*^pVQJI1>@!hx8pMXwH3vwDk}<|%<16)TTB=kZg=6q(ePUHYdN286H+mF5jTHLYQ+`!MJ)kI!{fHRvdC9dmv~n zSw{FIvpNnV3g(+Br%mWne?|3#XL1Bm^xuQlwRV%5@0%Ba?Dzyq50VnP?Kd}uO<4JB z7J{vs8E>4+c|jX>(eaj)_X3Yx(W+&Kxq4hPj*SIgIus68qFV5%TLY`MiiAKX3TPv% ztbB7HE6;*DI|FJXyt~fskR)onPTu=KCuD?ompk~c?zk|^mw47QF{=tmyuW}C$RKI~ zxOGe@cXPdUMB+cv-b{;91wy5x@{UkNrC?2^0SEr|yg(ZA1$|pI?TJUJ@5)^-7#P^+ z=YOMQ!;1z=`Z&LoNbdj#iS?BSNl%&c)yEzgDJQ9^+O^2?xV7J{#$<8{ZYc0CI_`XM z3ckct81FB)S0esz&mSMa(c?Doz5;yC7=PSvv|eAZh5w_^G{)w*%#$saupgX!@)wm7 z7ctr8v3QySCLQZ4l@BQu-IH3j+rKoQDSle<#Hzm@stTA{*-~0^NW77tUJ1pp}D=Lhpc6~=n@@^j@lfjG^`PGt8UmUoT8P>eZ)YI` zg(MHEKzZFjF&rFrs<|zqN23x&*+2yjLsckBnb~zh8AQ&*HAL)0kfha5iGBfWjZm)F zAo{8(v+b=rqKE5JXXQNCdcCa}l$ec*P2W;4BJj9rX-+B~xKzJOq zoKFNePMI!_2`xO{PM<2|d8jSK>Y%HGq?7Gi9gz^xm*5#eQrX>a;B*)GFjn_YcqPCW z!KK`9ErIb=-n?I7a!-2umgRl)KP!dIxsa9sr-Q5+O?V6{{kb?6)aYn+3S}^@7{giy zz-bxL+?+7ywm3Tc_es9B%kYVmXj%GSZz0jf@64%R(F}Z@e@2lor}kSxY9*4NEvcoD z?i6Si)Owt#rQ|{`qYH6X23T=226rHfQM%DVPZDf3XFpw}otA#s11AMnJ8@ETE(fL$ z&edMi&6;d+GJ4M@mh+_*udFRE^TolzfY{w^2}F*^4#ba%pqDcL42OLUY{Xoz8w0N(mB9~T7#rPiG8w>yPAwtVIF{#aBNz|@yS+on1Y1z5s zxF(KCya{FP;UPH*zOT4o6w~igHPv?ZR3q#~o;}akNgE#1DkMQj#aV8GDw3pzYRN@7 zI-{w*r|G=Le)%#a6g_cyNiStozyOtTZCWpqId1v8Rn(WpsbLS*^~O0|$YHS}i`%+n zBw@n#3f^_f%$nHm7((peT9kRb2p2vP6CRhXbHlg`Us$x5f@XX~SySc{dTcR*ay!P+ z?bZaVsDo!-RIm$^D)6$-<#?CWm&Cs`&w{7*c>h#{$+a$z7E>@pBA?Nm0-6?^MHMLB z(6+n1b(LUpZOWt66tsxWZ43})+}$qv-#Y)xC@+jsBi6F-F3#2GtthmMubJ{%oxIQL zJ~k!n`Eg>}kM(#@g}uO5wl4Wa%LVTjCn~5thXda*Mt@?R^r0rBCT6{?WYAjr$J4l0 zJp!Cz*?8!M0`^@=N(MkN1=fm9ISq1TwG}yegwN-CU9UJN>7Cbvbb4NOGFgPurQt0Q1Yu zVz%lH&Cdmgi-R5JGA%Q_4C~sS(^6G~hznFa*YQQf4$-@1jasT1P5SoyaF+>Ma7pol zX;Jah8ngJL>Wd=h!f-J5!C^kje=_2LMa5ws$K`&bud^b=mu)q_SWzw7t2g_`^FVWS z3Y4~C!l_=6z^|s5Id=E(pOD9`GYCoe>uX|1p5-xd`#|h1824WEH*=XJYrI?r|GV+E=CM{?WN09w|r38X}6+GTK*7&O@9>m2mE!=0<_M)j=YKoOU^;umSZI__K&Fn`PQB3QBqtl)3 z4D8qo@d%VD)?R3GZA$tvwldm&MTa|sZAEr`1G$Jz8_1;T3tLTpX<|XjSQQgc;QrKI zM)mVb=DVSv^vd~e?ZmQ75;*<)bwUe7&a@{`V{^q}Y58!An;3Fe9oX>_ zlHRY^sQp#_^D^HFT2Lc5U@yE_P&4V`9me)_r8kRIicz*)gum{$kY??_UQ_N;o^k*Q z*{{{@H6KO}1s^E-8ry?+myC+>f#~yRIhqs>V8k$S>J}rWdWJ<-5;LK zAn~eygYr(|r93>A>vYx531{|PBwP`1@63BABzWaNed~Io>33k4_W_=NYUZa&$~NGX z=d(TdaCv0Uf~&Gbi|2z|Hh#iE(hiU?#Qxk(cx3HTP z=V}+H50Oq*4+V(~G3kkl$+S~W9np&VrC+p;orug9o+@+*1Br8I2o;r{X$MHB#)D%L z6I(`K7M;RqR%HQS#*`Kd77#^66=B-h?#XsaK?+G-<;#k~*E2rslq*PGr7jzbLnigr zf=A$V{wpG=SRYU-5i~2u`LFKp;&wF-nfELpm%7R2yncq~Yv*BzoVeiZ^78(mQ%XAV zfKslNrR_>3{@g$qh5f-nYyi<~{dEj4_=(-|5gkn~m7N=oQ#j!! zzcwUr7DY1Y9p>gYm6`&X3{~p4yt#p6lcacT8aYvl18rC+gecEW9d5Bjv>_k3m=1Z> zBm21+|HAP>DpE$pq<~p8c8{*eTCNAgLOCccqa}=$5kfPfki9p9gSZ?|RIA43CtR3Hq7emN14R#S;HR13;;2Cf^(iWsrKxAsI;Prxh$6%ec;p zN<>(_`b${!$cNF|={Fn1+}zRY-E<`tL4y!1DzibnGX1`I+}s%*J{KC4!>ACED^$~kqPJK0 z@lo1%^&1}{jva|J3NbV~d4t$woX!rE5<_dfQ#TQEDR?{^&qMlg6riSy-7AyFN4%jh=aUG z9TZ#zdf`*}yKzD7qFHv0WirnQA{6YInd49`+#nnMU%uFKRR(J#%#42M7Eh+W7 zIu3NU(p8BT447k`(>2@2Rqy17?KbQo715bO@0Ixsbgnc@^{1fRG!7?4l4eB@4ol!5 zzPK@?am(G&YR(D&NR#dl#3&4KQOrVAeCwmd@>N+sv)XsbB%4`-UF#&w z*&PFfHpyZa!v=OsVh}`K#wx<#qaMp6nQ63*6?wboqzBE)nj*Lz^pCSG9z8C}_IU@E zsi+pNSW5hu_V=S=a*_Ef>EDDtyRzl_QCFW!XDh`ec`ezmI)pIBxNqiGao3$uYXo#! z1qV1wz5W%S|J?Z@4v4=;d_;5*n%*xJd*V=Ex}V)j{HXEwL#i4Ihx{QgvMTeIgp86z zXD{kSSq~nGG-#G$=*u&3Y_p-dRb|XG5Vh@`R{jWmhOWfT`!lBwoE$hdBxku9-0v~$ z__k1Z>_z9aQM<9T>C>i=X{*wf*$r^J$`VjXle7HA6iD!p#;O+-?sW{q4mTyMJp|>8 zMr66i&_o3YCJLsJj=PE844&+GYl$TA+>CdOsd~QFkCQ80A|7zP1>6R9S2`KrpUmT? zLaj``nEY+>r*GZfT0f#Uf|a+4?_%4Dk|mi!)%pH>Ss9Hx8TdpccZK-e{{q~Hq(ch{ zabs$Rw2q2P(KDi{%Zz{(I3|28kh_vb%dI6OY&+ha_jwD<`-v>ugp2V@Q>`#rjV?$x zI6zu({5}Nm9d$_bmibS|+;irr&%gqaRR}2yQcoeJ=kv@qr4=TZJPJJcxc*yh@-}(bDRQQcW=F zA3|l$gx2v0Bo-pY8A_22gH|7fQ+q0uvVhh`ABBLIiiXYmwSMBt%S=rP2ZbH{ZuBTx z&Wv5FdikizUm=iH;iZ>Y^>d7R^fi3)cUy8BnZw7EQDCMe;CUL14W z_gmRq#mmGr)$SvmXV~eunMG4Di72RdLksxmMANr(z6DV zR)C$XVbww^l>8zoT^#_UutpAt1`~pwSep84N0>5(bq4HW4j@bV(9I|+BzKo!O5BGk zyG;oiwAM^1>d1MfQTsvRhm|;0j9?vcJQ@2K zMxQ>xrY>rY8#=UK2NYG<^5mCTzswi&6-xU=x`;A0qp}@&EVWsy7i^m_0@20#Agr}P zq(x*YpA1g(-$1Hyr{hbua^m_|(inqsswCVi-*T4u5)U#g$Q|jfa_xykq^E`JgMP~Gb`0~%IRfae&%T^wB9xZA_w>siMPWlo zMcHD?F<2|kv0?DYO!Fm$;5K<&}9#i zG6jy^1Cp;`)5e0AZkoaQNIT+BbA&`Ty0T>bJvK+xW#Ny+A^}eDR=DVxK zO1Ln4`;AvWh>{NQ1B*`TYAuSsB+X9FaXJ^Dz<~sbi+wwI5<-ZM#T@hed8zJIJ!yR1 z1YL`7;rJ6_yrXn`Q1RZGEMT+Z2xO1rs6fZc1Hf7#+m-wiI{S>GCDoFBOxr5zUPMyP~y5x?KeD1EcZHyQ=M%JU;Uj>rGgPkz2 z@^O{CB#1R$f7M|?qN-B}cq%p6RvZw6OTbf4{|#kPl~Ty{U59EzI1@`GNRlT1kV1`P z1P0>Y7C>)zW!NhaMS>u^jM-HoFKXgt(Q1yM*E(dbMK-PkQ4ht=`{tWp%zCl`Ic^(N zY6e3$7E&vvv8RveyO+%^Qw(9|l7s zU{NA!sz@Xp)c1##s$F?Z$srXz6fZC&zTZS!YW%zSD~M=+hs?CB9^F9Fh5m~?8QtsF zT%ejyt5JTxp}3oxuA%JcY8#P_mNSi*6mKCRKorzQ9N~i=q}WXC9*5Vit?-fP z&UilMWQi!bnYev1wk&_@E->0hEi%!8k5MR)O^6pE%|QlZ6oc}`LBR?{1wvdP<~#b{ z#@seWC08syMkSUHJ;p{y*dm1Yl|W(QnqLqzRu@czn{w@kXf%r%fSr`NIX+0(Hu z^Di^SzKO#T+eI07t&Yk1MV&j|@ql?K`?qQb`yB>j0+TzERz7tY8W8zWMR!p|P;s>v z&G%>gWK)J&c9E8B6Au;57&4J%FB*(XB)VzvS_(|ZBPC(3)KZi{W-4I!+eX^ey!tNh z8j|JN=Xvq_3L3{h?IG>Xuv|-AIyXJgLb3jbxRF#8!k3=c+z_uUWF`%SX_zPizmY@v zvVSwA37AKY8&-Ip0!5!B5A1}92mpqkgBN5^5t zE?N-V(g-RrAyVas51Btq_ZCh}oYkGFHQ>3r$L*=etjx5@YDC|Z3tQ;;#Qv?mxE+~q zW%bwwIU~hI4D`S8@!774#3#Kd4k0o4_na)t)yH(n8YEwI0Hs*@XaN*guQtpRD`qz7y4THJUUL;Esh~LMTHoOW!S1TgP#v|lI#^BCZY{g zqI#s5A*;K@&`FxqdlKZ>)bPmuGs~jMyy)oYzi*K4@v`&e^+E1FXintyu=|O;bP3SX zJ{&@ck&x8V0Cc%*m8k08BtfHk+rT1KJ_4T%1{NXq!E`})L`v1S;I-U$6~Dl5W`U8U ze#?L4dy?2~t6AYP^r1%}6p~D5hOY{x+CAsb8PGCK%1rD_iWK#7&=vG_A;hG7jj9SX z-40Q#D#HpCpi%;1#8!%?+>2?$8CevfdRdSW_tdFi05Mbio51o^i%`OlanazcR&%7i z7YIvw9R;#7Yn9+yNb1@jOHmWX0j0=66qV2t$XEOw>MbF~SznMWIA&=nSHH&CSm+k~ zgmQ-r7lcH{RZM$zp?6Urqcerr1BNhlu(`hdtkz^zd|kd>x%s}BL8TmEY1)QoIi2L{ z0Y+PH1Vm7KM3tHHjTmNzje_qnLOmnEghPYJzM)YoOuV2p46(_n?Pxy&m=pJAp~Umk^mm!_Pd zu`!N7j-V6tPD|e5vnfGNQ;Q8;6!(L|O97p)~UBR|JCV zpOVA|Agpw}%Z*M&j*jXIoARVZ)@r6hVSQ#R@@9z_`@a-v(R+!=!!`@tyX*r9=^GZ) zv1ElyWBUzQjv?4Eo^LQx=Y!7e4@2n-z%md1aYfc$4@0Xt^_Q>5>t?U$E?`lFekEx_ zD1ARQajz8S`ord%p^Nt-mO=e|xz@U<3 zR~}S4)VTsY~&%Gp& z!vo2xfWmH6rMINZ7tglr_9y&tqX8VYyBG)VKW6K5)H)kXesWPFu>TOie;|?;29Zkh z(Jzdzykh9X9H%i8MXu}n6(snlCBB@ChHHxRlrsuZlu`6Gcwh#*6AmuJOY4C`HS9I^ zg+9J>DI?}GD&104vG5uO^E1EvQ?94~A^y|DRDtzT1=j?NmX_pBs)kMKgo%c{7uE3N za{AGC{#FXQTCHp3v|QlxW`E}KQKa|t1C&fx2GmO-pBun}fkBXifnomp#{kfh(JRuK859}B~_QHI&R6W|)kY7ss5aZxw&f%aoJ=+VN|!S24G)sLVU4t2%0odZuFT6m9#@%_qc0}or9!ug0r0P4 zHtKz*GC59$ll!p_U$MdfPH_^VV#9w0g*sZO&M2zB>lTHtB1fx>j=$M;b0f2IlM^K; zjy6{6is~7pTRv>m&P2-^^M|X4jNX@LpQ0auWVlNZ`w8ierplmFli&~30;edwvgk$k zT8uJWg;s^TW)RR!Kwx*@AA2t;0l>tUCwYGx7)s0uJ5T0zT>w=`Po|u61S+$gL9u=& z=f;j>Vv~gx2eI&r4ZlJCAzYdCV!<`F4X>i+VHasPU}hC6Pv;wc^Ww0roO1$G zbl4C3Wn#9vddvYPnBG^x@zo&vm%hkUJr3RL@tlw~%BdEt(@Cw<+GgxsEfCC;rwFu# zlE%L5NWnUZ;tQ`2$aH%+?VR%DA#JY?@G$-sTXnl5RGqT+ZV0WBjP(Y(*OARf)_QQa z;s(?jQyE!Q6Oc0%7c{24DwvZz;r*wE;rjF=Or$i5v=P|{F~{zNE$?(y-9(SrsCFSr z4F;Txwehu1uXR4d4ndL3z!v3d(lU3DmaCoYM%aPmZ0IRetC-z4F(YB%V{c7`CFlKh z7}vPV>%mXBRqfB%#lD;4YV`45Y25ohQrOLSU5`w<5F+cAmX!}H7zpisPCL2>{Gu9RD~W@O6Kj>Z zR~<&VzC_?4t&uUn6~^e}72c`-V>Y^6sLOGn?v zVshAoj8XCX{^)WF<<({YcA=g-;jc)r>ftJ20v$vnDqp_{m>bpaw zt}&RF0&ifIt5yed@{0DGstgf#S*&qk8WhDUhdBZF`eMD1Nc*U-RzvCIX2Zu)44HJ3K*RdBfiM#)7%3VN;;|ULHh|dnH2;$s54cz=Nxx2vA zwa9(KIOF#Ct|d|`iD7P=d?vgQ(`Ij;qYalCot6 z!X)%c6OV)gp7-1*gy8wB4oEKNy+uZ**NStCMT~U@BDbX;@XjYkojO>=!n*2_&|X9R zI7X(@^JIUrg+UC;w36+G^rFojRiJ$iTG(X+OZffvFkKXX?@xE zdG%&#R#fW|wa{?$Rs5uFSADgT#urd$ltw8!0h9CUOpp6E+f=T&?Ycls>w$g{8xm(J#NIJmu?s-vZ5mmL zqMx+1xF7w!J8jVH6fGjAtaAGvTQ|=dmbNDd2wZ5tS&VcThAgtFbeeV(B5-6>Kcd?y z(H*q~7ISOVVP(4qNecyi{Rwa67KHB>ziZYIu$lORjMT_yu%MVc#{IUzIw>y8)yF~4gG_fMz z#k!6rO?ZRL6b{?83RdP6M;rNEEZ?EcKI9p_F$b^PM(F5wzrLQ^^4FI_eV=KHUwcz- zx>C6r{_K80c$bBiO9a2R#iGMjtwp~(aKW`AR^Y7?xsug^%ZtXe5H(J;&@{ZkS;Z$n z>aNr|6x8=u(ky(N+bU!Q)5+&=@aA*X66{dN2xp{I&FV#_lm8pum>HO7q(Vs%JoTmp zB9fG`2S@rGjC~?4LoNC)rargh?mtuKFg46+TUHaw%$L_`00&jObK#MWh z=z^Yzi9xwS&7)f+=nSc4g5~+w)3OxM&{N;ey(^cV8U5D4wrOyuV~5*$EQ1Ai+$im^ zSkvkgtKPXqoH8I*t7ZF0*gc;&=Y%31?7wImp96Ee7%=GAP0AfstzNi(l{O$P#ZtV) z%r&TAO~~C@ZL;c@k;b_b8YAxt*Bek78_V+n`(Kl_PSzPn1S{nA9~baoVB%ju$(&38 z2q~yyIvv zn)elR(=)DZ)>n{Ydr*2YH{sz9y zlf)tAX(rV;EWh`CfAHyTD(aTQ)1N-Q*$UIspZf;VY5%S{>+JOe(y+rhUBof(Ct*F)!sz@^{d_Wn{5ugHXR}cGaPw9A?b)2 z<|M(+PvUM1t|ttxsZxber4mbeZ3g0G-xJHIJ(keD@7}0~d=7BwNKVw19E1HQmV~K< zSR*Vy|KxteHGbD9o&S}bwkNg-INH(G823Nk22c0@MRTKX%zG#N<^|4nE3Sg7h^_Q7 zRaJJBmCk>g%tM};ksg-Qe2{_o`#b`zeQ~QY>yu3%$M-CO?vHw{pRS=}^+KkB!xlj& z^rYZv!clQ*(lSfPP4jZdKDe1Th3>&v|5lSt1wRo9@P1NR*A#T87ph?aP@U|CYwiF2 z?nI`;;we+q$Q40(+jQWb97}PLGSTo`ziJsx-R=>2Izw-{Mcuqhl`&38!IAN;+?Ls5 z*j84cxNE;WQnTfHKdmm~XJJ^PaIw^nqPiNM*iQ|FeqR`dd>7BRi;}ieM?_)9)1QZp zaPUUIf2DSF@=kB!k7ZLE0X;=9{>E;|8w{;1%ppk=px=L)(A+yWYCE{SH58c#Zj>xl zk+`;@c(<^0Akec(=d=fC4}y7vSgY3)Y#WhXB5&3Pwfp}tmNF8N3FTAX*L-~*ZkeC7 zrH=^}lDEL-SxeiW$jtZV$P26($(Oh&uJCsm&KP!1Kg9`Plk0!r`W#G zReC>I1Zyh+C5{%ybA5u?OW&c$Uwrn&t#IQd=Rj~h7NhrZPq_< zkZSM+>dY8a++k0{-r5gf21=7UEPH4c)*HEWrr;d90~wEHpAYpc(c_XX%tX zggM>TMOJIbPZFYQ;{8BAw`^Pbn_}glz**2b=tARcIWNMmAdNz$l*QN?yil2P5U)1f zZsurrm39nYN`%_fGAk|Z z+x8y1kanR9*kwEhwY7VP9=u>@e1qqe*fQ_xWyRu!CPaB08J%&Fy}1JOHYX`<(W?j| z`O|;hz9EN_7QQ;CTA_=;e7lU7WySD^i!Z!TG72_U4IHs54-^HO^OVKO9^A_8tWM^f zo}EiT0)w3Bf)+=b&|~<*%;F=Y-OxiF^&W_fUpQL@1oV`@;W|wPdkS3HrAMn>&*ke9 zmiS(2;{GL;GpLH<^+tP;M(V0XDj7kr#B5G#p4puW34$`nWYw0Wv?m zl%Axye4PBVz#RB~O8&1nY{Ez_a00_qBu*VrSjaMi2VWJ7>>P$j6SjUbCG|l@VcvuF zLz|;I%HvmIlB=St$*C;rpCX9>n6Z;!MyLrw0j>Qv@#EKV$!O-^mXCQ(a{@a27M-Mi z1MX14D`jyJ+LAm99dc^r?;}2c&}c6azu$mm-*-8N@!VoT5)`RQiAYQ3gbYZ7bzF|b zL&Cwg`VXwIu|j;n&$uc^ig;;Bi(XN}Q{yHxZ=OPQOuqF`*5+BMI_4s>8{gPP1-;5` z#>-P?D-1G{4e*$!$LW%~c_l>dE{1B;0MnjKk!J`sSBLMEM$2YDh)^9ZJ~~8&YyC4KtkW-(h@Od9N#cJrx6P7k9y%c^6(eh zYJ2V7>4=x`(f`Cbwn5@;ENwB!++%e;>3azrs7RwFUO9v>6p3{EtOr7|BFR}@0pjDL z#k&p*kg7_d@3tM}n|0}CyD#!QB&FwIOb}$MtJHrZR6HRCY~7(fJwOs)(3^%3-#^fq zM5=%vVSnySP>1Qxp(uP|hu#5gn9(I#c+tzk$Fh}A8=Q@ND`0^8J+`#&akrVll)-B^ zJ>#t<(O@7Wj7Lg8v5>HofOzi(-~_1%nGisXCqC>t@6{KOX3NJ)izMV|+DM9O4X75M&|S?>9O(J>u9$tAi?$<}TmlmBkiLS}(OSwrb?I zg8$_;(E(uRUnL+R9K~%yH-lWy5Yc{pp|VRdq(h`C2qTsSQzvV8O@e_15Nq-JXTSpQ zzy>wBR2(4f)#qAy5y&_K7sVEClfrQZ0s^VaUjJ+f(yRPr_YW@w6+jLtlJz-5h9=>3 zVH-zWD-aCi*P3#O3vf4O%Gg6-t?c0b(Yb^;ycuYmykrDzDAumFiO+$HX1-V>Bp>@| z_WEsc$Okl!(NG{S?O{#>iLLLo*LuYH3$@W3gr-kM5*m`R+n*T=o+w{_tofp=MBp&( zEMpmw;Hb}!;_rc(9D)t;(cl+Im`Hh__r)&CW)&nCXkEpcH_MZ_H51VJ`yEp7b#Iib zo^PvR8L6<_zMrcKevnr<55W6E`h6IK@5L?hKF+DMmio-ZR^VwRsom*8escnla% zcn}MWo6Kc$Vr*L-X5(-9uihK}{l&YzZjw_#_>;!c`n-ZT=jfz29wFIgFPKETqcJ$W z)MtMI)f4z|A-vPDO7il)zIDSK;GJaOwpXluj|GT-q4ic(pSefWUh>@*a(MsY842l` zWDQ|Da~CL*3Dw(vBTY2wtldE8Y$0{G&RwrTeht>nxcg=QEU3$4!KLEKyvFxe!S`q@ z;?ZHhs`bnnbC|u;s5SNnh;o9%s;3#m#iD+|)4Zz3c(_zku%fo`t7Tz7z5uJKC<{W4 z92)pRjaLRGlUIdbY>|=%g)OpRKI_MHX<|J(2bD`xxg4Lp^?A#1KINU`%Bg`Tqg^NF z`O*0P&-!Bf-)B}hPd)a?aKh%lLsw;?^J_P2X}1%lZ$iK!Ud|MvWQg8!LW<28gGIC_rh3{*c7NNahPBtDVI7 zgG3KMhfmIbK^tuhb|3`SQw7cpbpUOdmmE!S0H>^?3T}X#^o7;DS=Fkq8=kOpLKxr^ zu*_9TQ#9<_+kN!9OQLm^gQCE2R+F4TfD+Rq2e;L)TP=e&rgP~(%QgL;#{OI>lILd{ z?)drWlWgNYon0P5fpD|>$O}eRY7odEgPqV-!yAZ1*>8k;0TxDvWW zd8p%#{ZpqY2uw>}%Jhra@HZ4$Wkf9lwJ5B>THmbAuPE_^-`C?9X?G>3m`7%E!*0mW zJH6~3R4VUz4N1dyy7ihjdLq({Hwl*bN#lZjR{wb?srAAu3E&tAWOz}IT;zQ4lkm&1 zV6?xY{^z0t;#5IvoEOIghpO11KW#jbpan-WRv2W(8s3KPl^FNQEO7@wWKviJ4<#4c z0(d=tw!Z(JY)>n*!U#4A5+Mz zI+;dz2)%PrdaZvax0A^(if1XKTV0ix?UjG*~kU-8z1R(!^p#T4M_J1GZoM4C9LU73&QzuOE17?=K+_^AlOQl*AzRrybC{|8xe8uS1F 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 191/336] 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 192/336] 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 zcmZ8mb9CO#vyW}#Nn_i#Z8o;8M&HJb8a%O^#%PQuwvEPU&?Jqmrn&vS=lt$_&z(PZ z=j_bx&RNWScDBhr+pbOr5!sWuWV9Xz3Tgptf=C2xyRC6xg%mWsQCT1Z=5M$dysM^k6bZ=nk|P*Git5hEAO=C)g>&l zK{o)tOMTZF&~gPWDaoPga+RKpQ+^{A;5|SWq8hvwC9>@LDL5gswNyPPk2S_r8QRVC zp-Qev2*5N}J!o+{GhSqs5V?*$8Gwqd7E095kyCg!2t9rGqR0M&v=_63BWVsdbJ}=G zBtt5uxf{yzAUf{j0wC`Ex9=?I%N5zQT z)r#EO68O68F{d#<9`W8B3BA7WO;xw7srN@%_u=MBL0+vHS44lDSXm!?#=D^-N!wuo zDT)sNie-HNL2xu(24{%>bt41Xg16(IeRo}#Gxq8+Omxdh$-)>-FQcLD3>G)>Afzyl z&8&&!2<`*L>EvzR{a5%7kC8Zi67}+d~>~rHUMZJUp2CktWI@ET6z@yWrW-K5#2_JOjs760Ta7*fq?f6g*p z3`M?$q|aC#G(7YMwLOfYlX~=mScCaFQRj<|n+JofT}ViBTM;X$?9|HQ#)cXF)Ic zK~2THwaDm88q%J?pPsC3tHcY81{&d6xpJlw$>lOQrf;5_HCoTF>qXp!g9dsB)jIga zw@6W2s$wBT7in9WydP;5%2kw>zkjEm;SNGi$@*6LrJp@=KE)6ST4J7ABr!ObX}Fcz zzW9(56Pu4j9gHfCAGyP!AH@8nf&NoeiedG3wXDlD&zM`EVk!T6`#@SXc0FE6ojhWR z%=O$rrB*hp@@+7ZdMj?<3R zo6&$28K0M~MLk{Y;_mB=m0>A!_T-k>#)ovqeOcaXghX~oBxdhx)VVnHRKD6_RrzSU zhpn&WPH2YYhX3%VoYmu3Az{*|rMfIo2<0d3Qt);6VE618)~wCBeP!r9h;TzUdin6Y z6Wfkd@1q8Mx)SfFCF-!}zd%>mkmAUv9PQAIzk{G~wCoC;Vx-WVqdyDyQI{-hakQlF z`+D@?TR9J5w_Ke~=AZPMK|w*iz5P?9W?8tdbD%}mYVAWQ(+ax^7ejv+fXFAouhhEQ z$GUdB(%2Vg!89I7H&@VcJGxyXnXfWpcJ8|{awXH=`+Rnba8}y8KZ^Pjdr-{J@z=x=|h99qqZlU<~?0WwQ^Ug zC1Cg9iT{PAPt0a&v2_2FS{Gmye7DUPFf`uY6|nTcQ6Wfv+u+PoU{+7NQdXU{mI{(g z4Oe75!J++ha|1ozfn#N7TZ-1Zgb> zHIE|(Jr2~SJ^)6Bczy=W@ULo0to*DY_rzAp>58w%197O@OD+*hD%)c#630iHs$B2HJh0}yqIl&AX|-5K{? z9lc@WHc_pJIWgA)`KQn(`-V_fvlef;b#)P;t%ytIyZD96`!`|S_K42$uGx9p=UDIQ z<89hNXJdsZR-tBBby86PEiV~rxuL3WT;-oE9UZUb4ERQ|SVtqVsAX0dFG)Lak(9rfRWq3*s0=y0t9Iu18 zo=zMVqJtF6kv|x8O~>2r;Rd}WlGeoFqk{*ab_MFlbl9F$@R=1> zt?>>P3KxS&nrJre*bc91d5$LiwV|;%yWCJ~YLVq-4IU*$SI)SLD$v1_Pde)^DHK_!_ck#Kll-V!NyvKn(|7gE`lR0S|ae>Ls$zgbSG)k%e zcR`sAE1Qx^G68$a^;S*|_KM}8#LCv%sNbrt&!ig28W;!R11%3G@bIYlw9yeD? zCn+urt>B#&Lvcxll$&VkyaX(I*KHy)P17;?9R1V^b3 znJPt%-#U+#Wp*m^DC} znUq}-X|)0E^QAvIhli598&X$sk{fvggq}B#wwXS=4tWK|{oA zO(kV?FoX_+Qa0HyT#+y+aaCAGR2rnwz`4vgGk#uei$GMY!&k|n6==ZIE2jUQ<N_DBTbMpxECt!%d-Y$M3k=ax-5je=z3CR15p}NBhb3ncy zx4^gzf5ef}(W7{hfMjTw5kPPrWa7>o;?_7~ZnhKJoq4OR7)~ zgUz8#Xe06iIg3+(ef~zTdrGy}_Yb;Wrb~}+FO{|nred`=(@t48M#Fdacan}-ok5}F zbQjl0`RbkZ2i%mY=M(Tl9a4V5aGk(hJR(Q=x@J2)#1VR$>M@%)lVu~7nsv{EPMn@= zEpZmjNZMwzH#b)0PRE~{uF$GD+J_mxV7BH(?Z!VbVL{CfQr(_ifeN4U<=J7s2AT87HPNn5-aArKKfat6B9N>%cKe!gVn|nIFmC2 zQwLeiSb;Qjo;gsF3$y-5EHR_KYzb!a91kpS;Zc9CK5B=kO(M;FHS*9O+TYy&R1R&E zRnx43`n$*z61!l94*9W*4Gh?s5kJR#j0^YtHN_d4Q-_~?@Z`5^J`UI~cgD^OrhcXt ziqr5d%Cye!=Z*O`Ij7D{PNcq?-S_2$O(e4t_P$Gflb?KP+zY|sr(Nj~)2~Hu@Nu;8 zK6=%)^kM^3iR-HxtLHZ-HV6jJ(g&r^AB(|puzeh?1(RH=hMj5yv5k$I>rLD&NNDPd ze2*?Zasr}P-{{3h^Ckf!9|@KdrM$=I@r}+UTSUK5kpOor^CmT%3y8Bw_Q9=iP4O)gX@xYzm#cm*(+8LlP*CW9p|`&?yO;L|XB#gze;4Ns zz4vkJ0(c?px8g`$fkBG7G2v(PD#OZOI#?!IPOB^@V#?X%^h&4GUoQe_)?j&+o~S9pj?|-vnbYh)S-c<45)@*Imw`OjftA3lh?OP+^t8YFBR^}D$Tc*-Af%cKRwd6wC!bz0Qd}s~A}b!d zMEhh!SS_Y_XGn05E#ohcR(57~6zZN7u`;uuU5`B|S2AU508`mLi8%I=7zkDR0lDjRV`dH^Aw&ep+5VIq-e zJUSCFeD((0(_RYln)#kaq;;B&n_GWK zmwGSsh+&a)%kZg%X^~s!jwHK%aFsxnf&;dgOOFi1IPqwWPk6>tDKwDJdp01tIZ!v7 zdeE#0QwYA=%4xfhx~edlyJ;#<-j`?598AcPe*1 zJXS*Y<#Y>o37IMo$XY-fk#8rgPGkaOD`TTRN#H|DbtWS)EdN7UG_hDMP=YUv^y$t0 zm*0J1eE8@k@Zoi?JF-90hvsZ@gkbB>Wgb4+()kS?p&Qh?mBUH#FHR_Ru08hos z;MgC!XQ_UQ|6<`w@A7<+)vV0fapFFCn)5L1CZ@HKTcYr;*WlX{Rj?ngGOkA2H;5y_ zaqEE4OA;MHR%O;K3c)e%%57=TYh@h)?zpaRa?7X95s_A1)Ra}`&CsHZuY4(#uRMUN zt1xVJ3oDdTa!kb#v0h!orTqq911Xe&2uqf{ND1 zYF>2`Wapi+9j?&Lg)C-U>%R=``YWNIpqstb&xs9Yv3LKP|JQ84msUAF@KKSkAcemn zqa{Xf_qZl;ow%+riSp^V$HS&?#}v3EIbE~=Fu^ieyH|dI-FGS}5vlRODE4h3(OhT> z-xk)xHt=UJJfVrhk8`u6T#m0H}UTO8Jt-fV|@&8gAs!iqtNDDr;Z$NZc&7!_%B z*(BxLs#5EI@>|)3{Kl{Ep8B#kM%>GdzMHgoU0~@b<+_PbV9$k73q}A`x$XUz zn4h@tYe@PD1sdrZ)IEvGP-gfQC}8o?dh_pyl6IK;$tTmd@RRU0*Ux69{We1 zQKq6qb7j!1M2zzaqiY&-zZE$l@%0B6lb;T43=|ufUCP374?FyEFrT)_t{GkBp6e)It?qit zWAexl2#|lrj$zW9un(gSOj#fgc_RHM#Wze@1&x9i)ESHNH%7d`g9E8SK;P#aA-qlf zU*Z&cXZ_*mEur=)D9%Y#KKYf?okQ;fdb14R=~wvWB!9sR)CnArHAH zFX}JdsNKp|Y46f0+rup=qUBm0{SBi4@g)jW*ptE8ST#&f;&;X9;x$`69e%qIaHzQG zicOo3tFcV7OG^Xcy;`CtaOuXkcH95d^OLsWYjRQZdq$IOSNH!DuE9{mS{W9zO3*87#G9+^pm$)`^%-vG9cLHxvI`tFg^xQV`5aVubzmhyD zQTHb&Z!hs=zZIs44;I<6)G9ZJe1EsV;=8an!(&B54G*0w0pmW+0E`-jO6X}yHGu4p zm4L`Tih%8ny~1HlAyR~z1}l0DU^6vggJl4Q_1B=b;F*kF&oA=C_pbx*Ptmsm=!>st zySJ-FMKSarEDybFgy>b>eSWjlGZE2(=n8*|AP7)$GAQIh4f+o;li=zM_w?KQxHWqu zstJ66iA@yxSyX# z?70siVGG@rSPPQ_@zJ2*wGd1`Him`9{l?7Qi**Q<0T+s+OG}YT$2*BFzv36jwI65S z9YZLHy&X19_l6J|Z>QLYU4GLBMN|s1&XoFC#UhoG1wfZY<8g5FM4SN~pc7xwwwm8%{*R~H!JC8uaoA>eX~VK=o=6&|%lY-Y z6lGZ9aA2NkWJwmVoV|v3uk?bO zY>K95zeBPuoQDYTT9f_k*}pM=ZM!L1-N}w~>xNd@^N+=67GQ(ywZTW-Nyx|-uwo z+vnee|2PdZCPRe(^Sjl@p$1I@#^PiJ{rgt{1x551Z2n97Xka%q67T^B7U{p4A1El? ze>MJcX5f5II?(?|tpBQPk$`tN$wB`cF_EC4@cxzlmbCIAz2GeKj5Ww=>L|Fh?6&`?m0f8#Uuf5-Z#<^soY 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 193/336] [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 194/336] [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 195/336] [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 196/336] [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 197/336] [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 198/336] [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 199/336] [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 200/336] [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 201/336] [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 202/336] [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 203/336] [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:

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.

-

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 204/336] 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 205/336] 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 206/336] [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 207/336] [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 208/336] [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 211/336] 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 212/336] 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 213/336] [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 214/336] 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 215/336] [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 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 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 216/336] [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 217/336] [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 218/336] [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 219/336] [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 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 + // 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 220/336] [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 zgwR`M@}MXpPb&WLM~_btpZG4%a8GRv9h#8iP*+!l*+0=R{Ve^!sWnqYHhU(Zt55nX52@Zhu`J|dDK_!X-;SBkoMNF7 zfmZmZUtD8J`ETx)nlCW`>hp)NfvyU4EGpZqVzB|Jfo@xdR_6XGM2nEn0tAV-rOphl z+!vbIC=usX{2d28Q4*+q1I!x+!WqD#{PhpH^h*pXFey@>;NGG-M?LpCAcXKlW7nFM z^pvqEU;a7}7zGO@xyup&C1bE&YGT#~^9M(~seLg;KoGpt$Y#y;z56g;quC|05QH^# zJSKbRT4$gG!eO_ICBvM--?4hPS00NdNsv-Pkstp7C!#_g9}xb0Bqr5F{E%R$o8&H( zmAeGUmh1lBxE{l~(eCBFQLRK)f8Ob*O+Vehj&ZLEKG?1cqc@__U9}Wn?*#)UM%Lf6 z&r6=*;+If8>wT%`xLfzzixKjv%FrRCYhz)l z!aF>9eRx$l{%exLdni-3|Et;Q9?G&~vKaJ=@pc;UdRk68g$bPWi3>8pTU#;+@Pbb?|s+3F~CeQnx-l`PwK0??SGy zf2j$V@4fA62%`_!bEKRN45|GOp4+2sYl%5cb#>^)kQe+Tu`ehfr=|K7E{AyDNzWR_ z)A)(6f1LP1?}CZrgxd9nob_}rYes0BLHEwlqql@6{?z;YR%@`HN2`S54yJ(pyT}LA zW518)G_>#IM&j1@RTthAc&<{H7V6REGGSdRNjQ1olPY-!tb@PM!Sgz{UB}+4bcf9g zXIGoD+vbx>`HzT6w~|`z>*?)RH{Hxr+m5o@(~Yl*8U^}ZZ}}84p#yqPf)%y-RjB=E zG^X*HqpO=G;3cFL$L+NiVZWGD+h@C{75%iE09QqdTaL6^cL386&+Rg35LYB&W(jHf zJzCm+Lvy)9pDj|#tSD{6t}Klc`$esD=p8wRg;jp1E4g(120b6c-a?L`y{37_)^AAs zQ2PrBNwNO*g4CA2i6#rYpkmCAmwMQSm+a z%Q42>=89JqXE=>X!|@bXb_e^BarY~2(w0z~YU2Gos;xyo@nPe?;HoKmQsf-%1mECW zGT;Se5GVL%vTl^FknaU~&wS?tvVjbK8ez+AlRV^AAe$zt70LH~e5PVIv(akPnH?7m zXF0&`g_0WhAB`V(HmR#i!t5ujVw<|73Z1Qo>3Z-28y`Q4>-Tait&o60i`S)UCH226 zchOM8*`p3fgISSvY4T4$hHcVRmxNvjGeDnl+*zr@tG3yt6-?=UsIiU=%l>{T)^G7X znX1KrP+;Q)cV+P?;VFgIc^aHkV-t^krGH|521;(cr0G8^ooB7V%f)U;BMGb#y@~qL z;O6cd`3@hRsJ0efQF0~W`5WGjj~M!4AS-n&01)Ho|>cH>I>-=jjG@{LD2Fto!xzSmxQ=2lVD8QC_6DT%(%X9lCC{@3!}qlp*_P@`5K4x2ZZLq+V__-{8;qGqnfoc0TV zreE?fR<&l-W z+P~=fM1&p}zMINZpAJAru}Kd+D8qLK_OKgDL^^QTHvTnJC8eY7igTJYCW|>7f9o49 z=WX^7EaNBl?npj<@(WaDZLUkhnSd3#yOD-Ct&e2tBzb@rb1!OWKsem_?e zNpQ_q=FQWFeQmtB-y=p%NG}iR^O(9_Yk>ikxcodN5Rio~)6e$QSIHIQIqHx5)>Cp$ z4J8KoOjatbf!S8&bAOCi&cGAw5~^jnPoT}~22XMsiRE=hht_*|^0NHDtAO;|_&STE zM4-=RwJTgP&}c zsY9978ujzeX3qmPYWLyjRmL_P+*Euc^4&W7;*dtKrcBnn=n1O*D|FvnZndEDMm}?z zuh5~s`uzHY*k;Wx<@w=TFR;y|3~!1C_f)_-$#1pq`xZ8bR(n*=(N_G-)9*q2;FGQR zIn0G#ImXT}2%^cu_S3)ilBhuNy&V}g9OW6TlUTEjfMjb%yT)BLWnUuc*vtP&JCsnn zHB+%CNBpN*97=5kS)T19mU%C0>`-q?-?`9>ekbhd)+`%fpJ0)z6eYe&J#p|UvK2|LcOgg(iX3>sZtyZ(ENGB= z7(E+3K@DF(&w|nZOpybGy)ZNHksqBvmQ~Wg2Wp(!-CJ@>V?WC8h& zUqfF~)D~>v@kO&DzLF1UoI_bS{%KqckmQu$$L71iFD7p{YEO;Ei(<8mq$5{=vEFM5 z{D(9QUvhY$~YPkD@GEufOmqXJdpsb_KL^x}eQEa%Ti_3A54@ z>@q(Ji1hqN*nOJhUl7;Z)K6u04-eSu=UIJgTaxm?Szz~MiSOY=D*b~R@hRDVM?#SW zt8@W~XbwARRcC9v^Ayhi?zaJ#ayA&wErOxNSS`WG&;avk*l_6wR;!Mv&wKwV;AlT8Vr_tFmj~_oZhTY~dC;tW}2Gp|7COpl^}5!|vOxu?Br!5E9D2J_*eG6~%m34X`R7=mjsJGQ(?L^Pu3WXk< zBq&gzxzr#OOZGYY%A?>n!M9`Vg>@ zKU@nMqHyIRIT5J$K4<$E*4~0+hJ~7n&a2()=fAH|)L7W>Gr-22{0P`^@c6kD*#8wLS%ylUAP|u$FMaa6pVdQG2oRra04>>nU|EfI zEx9hC5kQE!E{S z=8nJ~)M%+VhLqWG3D#ju!D-eaM^qSzJ3;h4+>JQ>RnK>OgClWye@pQ$?KJ#^cNEqu zMSR4ZWmsEKAR1OHfcRIwKh)+;DDDpFktPi$KTTB9&r1GOQiDQJ7Y$bc>61pGBv#76 zN zX+)XOr7?a`83}zB5fq+sf80GzeMrs_kizw1x(<$MMU_cehLsHL*W}h%Cm&(+MSA4@ zoN!FBt2{(bh0=jb&^v%@+<+*Q_Z9)5ot81WVtOKB)(s9%f4g(PuV;gL6+SZ%4rh?O zRlKK^zr=dr$ti3TN=ixYR5Fd?9lkr-P)8n|Q&;Z0AwoGTkUp0#?qrTw{jt#GVY)Uv zy;rB2y>M&^iY>`Y4Ljn&oh4bZZyC)bPh)h2-NhJm1V>y<@76CZ7jd^8cxVDNn_Cy_ z$g#_?vM&7UW(~s<9)XlE>y(VYlM03+ACep7>D*8546dV+-#3Khj85VC&PTX|XOhch z!IIac+z_!Y{ZqP+&LiZ?QyR(WA@49}SWXuY{=Xc5oQ3viG*;i`6{YFA2~a3uCV4%4 zz5#>(K@VULAUpldN%>~gegxb&? ze4$UBdw*3_+&8q30j&iRa|ta-r%zP*q1I-oj7Bj7mOTSkST~eW0L+ysHVr4l7nedw zJ}LDY#EHuVvy+Bpb&E|G07I3MB=8>5UIx#QsW5+Q9frwh3?N150@yV9;Z4f=U~w)O zs_gS@EG3VmR8LY)T;fn$sgNH&Y2{T6H?gZo{D=R_+ZJ(*j>8UOJeWwNs2Q!`JVU{R z&>ZeQN4|0rW9|N$Ra(lP^{x?g+=|!?STtDN$d*e9dHPFOvp7iMxEz+xWF@a8_<>T< zlI*qyjQSY({F`vi0Eh-nvmZ%;M8FCz>N?1)KnG3HUPB^E!jmuQLx{~Z!lo;Q(TM!sq!%;e|-Q6-q>-H z!X|>}cvOCiy5B?S5m}TU-~5g?V{#WX4KBA~?KBf)mx}EG@Utk7=MeTvMZA%}cdI}~ z7l_3@NO(xZ$IN%xs5 z#1N$fF8Vs8Xc#JHuRbg#EtZyJTXKIV+K~3(4YbfJR_g} zIXEV=s#V@FYc?rXi=>e}ZIVYwU~*u?c?27 z(My8@^Q%8{NZ^L6Txj0Sbz*pq81O2LH2HyzX};|fAMk%yG!fTOLbrjKrpDL#zAA1y z4`PG@YJ;9+fB%6>r6Uw<##cPVB}Tp~Si#HKcD6H;!Ca``iErG76%}Uk2eU+s*eG9n zxWP*a#o&$H$}5~2yI!}3mOs5SNiZGGg^j*)K{GkJSm4WYF%e6_D_O}fj0v`=<`RCU z?!aJJ>^=Up26d7ry2tAi*cOHA35=TH^Ya#P*y1*Wu)o^jazaE2Eh17NG~ujHnjgzwr12<^nY#XPeF2O6#{-L z0fYk=tC~4LW&j~!tU>6d5+E8uxTj?XzCK6(m~uu_WEJUQt7#A_`mHbcm!XFe7>T(v zVK7t1CYWM&rWGzU-^XKS{$7`iPK@n$UIZq5cNN_CHMH94>mTJjamuM~5m@?Nipj|e zsSwYS3C{zbFEM}M_GQtI;GzS*a014((qmb^*X!7^)pZHV81ku#gB`Nt67{EbSTOys z(dbCe;k1q_se%J@pR5?Qm9&V|Mv^5Oi*xoHds`%r$O)orztX0}b|XC$Z(W%r z6zDKJGNqwNgRJw18(c^rY=?(VtjXP|1ft3x}JlXmr7fcw%cJP1T(IZ}PJgj=PU# zOsY2JWaQzT5E2V^2r>Qp`j4_K|G4FV%R;G28)G>ZP8oFeQv4h(5pJ4hk9DvBuLQlhJK+1CFheB_67d>LAUUjV{r0WiUj_~fcRsNs+l znw%3H*uYWBzMx2DFo>qNy_+)vF9g{;l-M#36%7u}_%xENHzHBP@xFQT$CIv>VCU{> z(~GVj?Skw@6*P9|-t%c#g$KVlw#0Jdo}iBCHHlMG2XVK?3*HAq8~%2s2*qQ8%IkXN z-2=b#fRG5!zt2(;faYPYwOvn>MLF8&5TepoBtOG|f`Mp>P2?&D@Oe$H5Cr|V#MV8W zm!_S&AiANGDApG$Ka$#5&+}GgdTG@Fse#Az=~F%)*GUZ`{tVcX>iXTFF6OD4kVg6@ zsR;eU5*0zTlp5dq36$`Q9Fgi1^}p@kL_aowr@*6Qn<8_hz*xlm447<@N;Q%2*`}jB zkrwN`*@SY4CL{W~a(&&gfWos@@IXT@J1Tb-+L68i_KH7t<=GF#=U;v1X&gz|2xXLo zxu+>Kp$I$vcI2>u&OY&NxA@5sww7i2rC;4b1*x~C>KVEPTmiZrY=y8S^~5s=rVj=GA21vaQMG)tQiYbJrpL=BvLOCCL|hX zma9Y(?@D}(R1pzD&;={(AWy{6x{FjXYn!p^KPxj9j;=FkBXiqU&sUx61+%?HQBh)_ zJ7l6ax7V%MH(!#7T$d@8Wy0+wdgLZJCAtKFe57bLuW~zVRS|ui*iSq*Q6y#~*c?mMeZE zXtZV|S&v*Yq;A|RxNn4>Xw5L({rZC1N6Fc?yR6--1N5o^2^2IU@xH9)>sbXL&6#;% zs$PmIu!rRKZ-{U<jW3KS+46hGM!y{h%5I4BmEqpWE8c zZHpY!*hBie>*IwWeWe9urWTQ6jq%*e@Cdh^qVUD!vpFWf4JkZZ(?mcgL9W2B98yK= zPVgtIOPrf{fjLQ^*P|z78Q)!UFD-K5P{S${HaIY>Uu!A^UO_EG74G-><{XYUpLj(y zeg2#nhan?@>baq*s{{17Y&buqeQ#2heUOF^Y_eh0a){#nkc2X0lPCgn06&630P#Yu z-@hLj3v^5e4dj}inN6BPG)gljJVzvKaAT!VlTagU(3YitUr?F0NXcobG>+Q<4d1xs zkU;&pWe0X;0~!u+wBAIUJ_kHp@##oNB)mlYx%y%as<>$n@#s=s^`*WU7-4wA%bx}q z&D<2PVn7{5A8$%QE2I9u(v6)`Z?6DpXu~S_P75nd>g;YN zI6ltoc&M&%yFB6@FMaAA*&1E|`?XE<+T(&kW;^r&xT_@R{jEip1OSw7x%94twU zlE9gEaifW@7wlg7;C)N!Ze_7uL^iZMINqW9yNMFsU@Cy5z)sLrq&kShg0)l}*vSkb zpyxPe<8)&vWsI`3;sUe)+1;L0aNXJ6}Tsog%M%VkR zL+t0@6Fhhwf29~vRm{dpQls5;gA5AAzaL5eDmBUsUN_bZr{n*F)^++)pfJEKKTC!l`UF0%K}N zlgmviSpVF@RFG{3o9+#u<4^l3>oyrU;6aT`Cm1>6u7%JBqejhk4RA~*P<^qSOymAV zK^CR*CP@(a8X<}Of{fB1ZI`@Yi=+QC!HZQGr>tnoEopnQ%hCPgx^MWF!P3TW_@{== zxL+(m_xAi>vhOBLCq*F-a2{JKTJ4-HNwAjgSw5O`-tMo8`A~)2 z=o#(cb`N3SjxvH|C!z-K72+i{YC%$l#@AYl_)(3s_lROc$vm|WMtLRJsxg~ z+h?$%S14;Vb4%R-q7o-q=8n(eAJ4dHod|-}ISARr$2zE7{b&@|!=irB{Dzx;zUFls zXVjg9i4kU03K}J(mLYLQfjB1q_+-xuCzKTx7-WA;@PS(cE?`ZeBXxhn6xG&wRA9x( zsNJ6{QO{yZp)K5<-g(E4lABUv=z*_tzRM4n8q!Lqf72`iP=1q<#%hf5A*6Igq=hUx zzkTfeH36pfC?dk85^jgI(c$2(!n{BpVb8sDliRpPsCeMCiF@VP8qMHxNR@WxX6DsG zyKvA$2|=XId9u0fR&8WR-Gj!Hrcs{vopJWjhKq2_+C2H4*pnfINFOq%ML7wIY>;iD z&qo+drHICWjpQ`XR!&@ld?n$UHe-T=`y>x(^k&?KrG=j#AX#)A2X>Z>I@mGfLLMT2 z>rKv7w3@aD{ z1omwKzA7xCZaP>d{1uqt^Rsn`q)J?etBaJdWk-h<@ zL{CfH--K6#-w?Ww5^dBC&>&1hk70G)XV|OM)tk_n(NC)W+-I-~3zxr`N3*Po)*w_| zqVe97JYP<18S~#jg~MD);$#v3V)=N+7SI%Kqlu7^9=0=fBiUbQrBS(HljZI&nIQRe zC&kRbA1xYWlV~CYJlycmY^x&kZzW$s85Pe2jOs$4oeJpG3^!R%vYBOqdUcs8bgP5BmbRujp33O2z+=JUC~}J&`<`kKlN=qH1RKlErLJr)Xpq|#=l<## zFx9V7%z<|0`6s}Q?;Ykk!@*XVMFZCeIx)A;dy!7a4R1>8(YanbiN>{8JHjMdc?B@$ zmMsv{o64L1$7=QYM*!Vc4!T<(cIW$9p(ms5cxX>|t15PgZ?EDrCIpJsHi{|N?kVP@-Ep$;tSe=Ygsm^>e87%HX{8NR34}+KL`j9aG<`Q5a;1~xz}l3oEK)ex_|VNkYz(Z9K?x6MtbWA~ z_(G){S$k>XvADKHjWj#7T%J*{FD z%c5hKj3$diCnyZpu>$mM*13Xte_#780bVe~QC z#13ohcXHZwJEsovR|j8Q-NmE5mhP56N}RqQJYBTbszIw zpk@nCu@8zE^;fVCfU0&)J4B3*b$VKV$W2M(hurd{brwMdqLCtYHrdet<76I->@tHW z{E_ZtmSbK#s{4{`^6KPbW}6i|WFwhqscx%CtvZ`jqe#L~Q>2Ja1m>@(1&t-yB%zu- z*?m~LyG+7x>=2-&P0v-hgPEbGZj8;Gg~mT78>ACMdCWuzP}}n@je5~mc^2j~xAGP< zw#jrMITcz&`>`D;Gud0T8HSRMqk9v@sTeE6#qCR7-IElUFlN{YS)PUoK2@Kb#fpfZ?R?~ZKDdq0r+gb~HuSC0PMp?q}RbUXt&>PG0wsvMg*JMlQ# zi*CDIWaeHDpiB_9f>Z2rKd;@|l{2uk*-K;Y-`mLGIKq^Ylc?UTCd_+;j>@08^y z!wU?xbwRbo7^i%ZZ~h#|QhN*<{BB}D-Vk{mNBYNjP%#x$=qEdwTBD_gr+=%UFK}R{ zk739&d^=`W#)^e0Xp zg5>-M3JN+=I5t+|FIV?lz}w%ewY=UJn5Va<&-{<5C@Id@X_{zIP(niBP$_a?uLJ$_ zh02>Wz4}?Wnvcj@jv7N2PlCWv2SaNN`247ddbWkwNQX(-Fwfi^s@NtD%C3SLEt&GZzY&co(Gw&32CaJn^G-Wzid^%O9 z_z?8L__uCwfL6NdnZ>3!@ah-PSWyMIEi4EGKiyp2>~__#Pi+k9{B{Zae8@gEUEe3L z$=u3)uoBKUxl%O8;QMGa$osd$iTJ?opxTG!c6#(|(z}Ex<#)uM{p~!U6e-D7*TuS5 zI^1Q(?ONl>MaH|~+FV6kqhVreTC#ePV!YA&PZ=+My@H~;=4g0ug2FS4!)3F2H=)GS zI{1^W$gBkc|4jynAeJ6UciJTK2M|Brr>J48AV+riPV~WRrDz+<3bW|ia{a(98 z{0}S~)`du2;O%?-0?-Q`yTbAtD)P`%(Uwy@phRMJ~Cl0Tl^?}RBnmAt&>5DEYk=ScUR6(VNQWa=c})3Q&knD zSpyRJ|I+6Pfi=S&kja=bU8BO+CRiI~ZH?1u@bny$O$Ddi0g^^vRN@hoYePe#78+&5 zvvlOzV_R)UME1SydbP%>Zi^c#iusVnMglaFMyDq}Z<^o)gf+0D&=-QnJkS7e8FCBcjAy2n+!H6w`vWen*Gu5oYK^Z7eB(^-@)PAg?mBSTXi z17M)tv!0u7@{ zX0d-aRCeT!&mlhkcGrE9`Rmh6PWl)EcFz^MI6swltfQ`>KOTY^O_Sj-;+Il`RcwCH z{SGINL6ZZ;h8h9}wdx<`tZ<(361_ypsrK=W(r)u4I?^W5nN={=F>?7cI*RRTHYnvG z`|s!>FvzkGYAuCKO+n_)U}X}IYqTyZA(c|vK*{`1UbkP^*R-~En?Kq=htnFsPW=GK zzl2fsjb7~dxd!=>Nyh?yGvS6N-Ilc|o)E;UL)R)iTuiE>Z#oU-ki!Zt!fBZk=Y~Wh zcmhmfFa~RVm*KzqWW524=s>#V_@R2o5ME)ckPiJ)t@;qhH zX6jPaVnp00%A(JW3W1IJx|N2g5f;rhfrQh6{HQsBcZWJ{r|UKmMRv)qqSS<;egg;8 z3y(}gfnymcfvn8#MDgTsnk^dD7brDNsK6d+JgjNN{naSj|i5Q=Yvmdq- zIB*5Q|0pH)(Y&OdxcWtz>05VuGz-AYDiscYKXd11Qu4M}t;)}0Z%d%$b&mQc^GO`c zRbJ!W)H$PnPN9JwUXdz)hPoMQ{N@4l?Mb32Phc0W5hAxa5t2I3Q>@0orf=K+oY&t9 zE=hrGK+m}vUct;OR6I#MH8XQrjLNf7F3?nfEM*$CRiymAmSH+@N&Ofd;0K6OS{YC!+V)n*#doA?gRtL(7gfLPV(UF5Q_RkOyP)mwUrnKORsJ(30YQ?Qv0V z++5a8Lh25+H^S5T8bizttDhdtlR`vlo^UEjmD9PdU*WmyF@g4@f9WO05GK)GT7bK# zqAs7el~faXnfBLNXD54)L6=3;&b8GSD_T1k&}XRnS8*2U**`^aSiiYM+)v)tQ(It1 zU*o!uP_qWse;zYQFz5i6Dy((2EzGp#Ee zza-Ko=;o2yIZ4)CNzqZNT*}}o?RS157f1GI_ctX<#j8b&zH-?0ZkH7hM8NOU!^tvm zb%GRTD}3!C3}+s9#82`cu71wKXt$W4QgR(MR1o26{jfT+-enKquRIb`7TQ2u{oLV1 zE3h5QxjcAw&d@YuWpL=dAJ-v2=<$Q4YoJI`|B%=S*8Ot;HUBmY>oC7K`}8$}YftQ> z2`-t1HT17YPn_MfR=tkff+emnN%P1FY5tERY?!CW8YbbU#cs7YP{UPLDQCvD0xETo z5~&F2B%=T%c%=a#0=Mipav?&w(gfjdQD#@Fkh}RCdhQsq@XMW7APw&p$w)}?-Ltt+ zu>FitNh?PPq9r1ZL32dtb7=BSfxJP;1ra6x7g`#|k;J5VHBFk&g@KAprRO!8@p`j# zH5Kw<<`?ZUYJog-)X(IyyK)hVJem5O$Fri%X&^1W4L17S5N`$S8*4}_NF7vL zZ{4}+@ni=@MSg(Gh~asC$TwC=BQ$cNStD87a0?H_!ZEzDitqd=Lu9KgivG2@VzsWO zP@Vn-)emU%2jRRrZ4jRLI38~qzpi$`dJjH|hTWS=ttvuhjnF*x#Xsb9?{ zswd&zPB;ajPhkWKJZbfnAikkMLvw7U5Q=-TBe~v66quMk9TZO&t+cf;>#7fNup!`T z$?^h}Sa=j6YgZGU(mjB(P@j2y(cDzuJtisZ=;va`&RmiczqJ` zj2k|w+y3K_TKU}T@rUb=4_#{e|J=o>g9 zw9js2hwwqzh?vn@=BFW_MMZ@?W18f#rs=kRk-yr6RkABq@;uyJ?TUjn(eRpf)XJgZ zsWM{!t$-6WsDMe=HDRpC`}ab)Fuk)d&>J0*2TCR`H0-48>^^&kjg2rqa}11ZD}QXy zbIHf07%(e)2Uu?R(Qazu@@c--8BDR5`1RyBQ%9Ji)$?ji=Br2UYhaz^H+pN%m$ByB z*1ukE!#DGj&%R52qRsp{eb>k`q%JQJ3iNH zbki(LB>%;XQuRcXrrK9=>YS^sR@ib=f%F+sUKgA@#2VhClntBvQyKQb z!Ny7=H~>sSj3pBJ<$~6-il|}NTaI&C?D)P*0zWN&rqfs1ks39<{gz!`yA{QAC`Imf z#5UnPd-(Ozwbqu`Fx>DnYZ>LlTH$PQe8m1}^7{%xSr)%Ro=L7agCX*0Mi`t!31@zU zC1pB2l%j4$taTLrgKy>rsl0TD&)TiER;LTaArp`o{d0tL4-xTUA4Pd-j z0E0q=7^V$_kF=*X8s;%Ng&)Lq>-*QC2$nuw8*~HzG`cU2#HcG7AtjM!AR|*NAt?mc z%#0!1~iBh_M;&H5Q8sTFE=yNq~SO6r?62FmwxC|UP_Fyd`y{h&~)y5bM8t}e@M zx_7`}C)Kmln$7VpJZA5p^|XI7Gc`z4Vnj3`l?EvmTT!DSdsvQbKx*8+>zs<;w;~yH z16qu}*6p5Rt5But)47Tw@2tW=&oDF;1Q}f^Rw-Xb7X?O0F1eR<>cDB`%hwlrSMlM3 zj%w6y*8ws{aM|#cq-LxR0@Xs)R&i`+?Kt5ML|%L{hmN> z)D`>bn%~DWwJL9MQ;IL!HKu%P?1^dS>%*!#33#_IhZ5(L09oWo*rVbrGXkcv}$pw))(38?YGbnC!L(gR{$;RjT zzVu8_gs|se^V9Xgy7JtCq+TB;q46TKG;ORVRP0ir&Kg=bewBMD%t<C#0D6J-8NT3eq2BwUc6v_w6+f5y^_e36^g2t2;Ht64PZ;RsYfC6nfHN%dgJD!}~gq5)S z-R%#{o}B!uIDBCCsA=`f=cl6*5gL%zlp*6t)W)jew;7&72lK)M3KtbXD?~m_aMc_L#Nf>%{@P!&3 z*vy<6MnVG|Yc53c-&pltdmi{+a{2#jOo2DeC81ZqloqW2on)|v1wQmYu)W0x=umK} 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 221/336] [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 222/336] [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 223/336] [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 zcmZ9zWmp_R(>97b!7aGEySrPE;2zv{vB2W)i)-*;!QI^yGw88et@^I*A zM@4x)AcN0K*d)zSq5wD!Qp32%k*LSu{oB&L#soA^2_bxlzo^I!>gDmwc68d6#r=uL zy70hMy^&M~^n*@raMFye4tvS!kgNS#v)-6sgLK3JIex((?@Id9AHkKc!l@rfVdp@Z{%?93 zRRic9Xa$MFyzn_hOC6@oYqQ+eTgJ0mR^{R{lJF_o2DP?q88lk=TVdIU&)UBL|r4g+7qvd-WjP;AN^BvphJOn z&j=ws=eF9_R#y}NpnGx5b-WepHON`FrQ|Yc9&E6iDNo{UskQHoy-U?6egnl0@;5*d zC|{V;M(q?M;k%!57w4^qUArEs(Ed7oe=$A(;xumWJ9BaTr|ZC8xI;!ddgxH_lA+d! zY`2|Ud}xjdo~)8~&C{q1M{41|qZ4?6y!XIJcD9_4tRUA#(MjAYhndR=NkwM_r=hC0hr4P7=oUWC!u0&V1r=;p9~O)Y#Mlzd<=5} ziT@GL4pAH;FQlq9=_*~^me}w!!2302fu8tRLDLt=E#uJ=DkTSP_`06ZxDtnwvdauA zMgz=k`wY--N+qEC-2^La(LGCzTj7x#VirVn+PG}RSZ1HcBE4tfKgnWa=VonT;qJ!z-wQj7mxFzFvV+qq8~X5;>Z)hNYp#$aM4}cwcGawr<|&C0 z;SrS99$&q3;P;mc!7QoxRbSCfmsnO=@ z@!oW=)xW@!qDFf%TKK>F_lJAoD=OtyoseuKm|t^1vFztu2wZCczgE+jxgHg%Q+~l2 zF9`gtg3@avQ-gQGkAo8TmW&H2``4fFeUN~OY7NPH0;Awp3Eb%t;pRUqNFH+vFPI{( zUObceFt~tjws&KL?<>wj^h^8BK5uJA3K6aScW2CVF8#U7Daq43H;{f3O0%*JPa?)SB)5Q{nAD9a$v6fZAU`GIs9=LeFSBL<1hAaJ^}%0oy7IpZqHm z60Q7Vw>j7yy@A*~2I#s$}MDkIh<8DfL;JnL{nDb4q$UMOG<)j|jG#F>9wGB4*7yA;Ed zrEyepK@sI(z83}XdGE6OKb?xc^Sz%|SBt(L z0M~A-yWj4*-!ETZNW0(O<3&I2`+;*na2l!q`$_Z6y=eTqj^6V!AZX|Mg*7 z^zCuY^OSY*S!%7cv2zYUBAE`|I{0o9?X=iFb05mSVJ}K@<%sVKyEn6J@)Lkx)!50O zu=w~d=7>Ea(Dn74D9p*(9hl3Ce+eWY6Z(!$5{nhG$be9FUDfVQ6dZxB2OQRpM_0S7 zKtjl4M2H_kl(54IS)@Z4CZh;BzU{C2VAaXH&@%a1W+L>J7QgB{o8Dd);fXg2MV~dX z1un*2S6|@OvMI@yL)`zeJ{|%(C4Z($uR^6o!_-xA2key7!}Y{c^(~QH3y9)MoKIQ zzL;O9vs21T=9H;85tD?E^_LNdcf0|Pf>ASO{1up((NSjM#B-7*1cW{f2dcLx?ZY38m{og%gig zL?HVC)AnqcUGga#GtHD+(X+Ee;imhQSWbxy^!B3*}2`PcG$JA_9X zz#WG8;>OL`>|sodfBYChx-JwLw=8yAvjQj&EKgVqm$T5LiBCfW`e<+$TLc_e zNS_f1PQ%3K%X?*>Btr1SmGX4~zasDC2D^QVVlDK5W1T$c(cLk88uzmz2ijnGamk_? zM>c1>ZbH>xFfZ!Xz4xabkrW8~s>|3VjPs@FjDNzF#49q}ck%hc$?;IEg^xhl67A61 zB~@pf-in#+bYIshl(uM48q15vz&+TQf_a+XCQ$cp@AF~ms<+Ob-Osh^ecTm?noyCn z<4<9g>ghPYJ^b&hzqpYBb&6x|cjw;NMB%mjrm3Gf^sKICLr}7Da%=D!oRH9RI@ikt z7?l-X5BQH**-pWM8;|1yJA~C5;M1*x8Hbt-k+g{axYG{>^X+w!S4RQaJ`daeoHqSs zV-}-^Z;G0S{G}Xhr&2eW@(>Cva67mV4jrIY&TR$e#Ehfti5_4jMAdECs5%Z$|K{d~ z-E|r#Jp8U(kQ>x@@y(fLN6yOMuTTIWE7>RQg~7W-U| zIXG71O!bOJZ~@_`cN8OMVipOyz+H$_$`x4DUPerXdY8lAx--Q9g5bY-xu{I^B)T0GJs;W08)4hcnfcO!pr=Nk&N> zPU+#~vf;ZgVw2pmL&E#fvwuRWA0CeKvGV)1ya-$l^HqNR@0k1I0aKY%6w)NBpm+k@ zY12cw7Lgqjt?h@ZgT&+s#mK%-r9{5r_rjmH6QL%7#GRDscqV&iuJp`U3O$0*ELQ|= z{BD4F7H(8(E?KvCr6%~9q@>9@6LwQ(CR&xw{x|T0&R@392%h9?Wbz{$rEHAc6rk(P zV0XN4P62$wIwy=eg?|V13V5seI|FrVgEr|FnSS(-sEULlxrxCUDJp$Nh+M5A`&UOP zD|(kKO2j-ZsYRR^myEyJ3z*m5laXi>0u?}Kt;(gd$?~DtL=PoJ>=lP7L`p)9u&L!>=qe zh0WO{y_I(O*riV)x6W}(Y<_-289?H!|JYF0iC;KKx0YghPs9J{zq2%nmB6x#B zeS$tA5Z^&`JACMTC}6?&(RC~B7E&!0xao!jQ@;zXn&@-7b9SW*U$!i5l`kb5dDn4N z3I7>n4-2mL-;sek*tw{98*CkE5mVMV!hR>P_}Pt{K5-$cd8nmVmE6zx+noarpD;Jd zd=9*Y%3TlW72jEzDu{>NRQze#FtuI$VC-zv1DZf1!p=QE;}-a;fPE-j%EoqDKYSM3 zEkZEmXjl6MDL%&fP5#a|viCEtoE0}4JEz({@uQ3Q@Bmlqm+U1Pj`aiLF@XeCSnh1& z`@IZ}H*REN!}srcA&c98whIUJJ||!}rnk*BxbH?LWmVYedl6|(BN*Zt9*=27P{rwP zg9JaN9wG!U;m)&KZ)F~XyAJ;|8UHiZ<|~4DoKxF|`OypNXNp)7W`f#=<1tPD!*jxn zo81V^w2uq9Lcf^Yf@3r4;T2Vg`ESw?13RUs!Xqp36XD_Ct$hsM4x?IXe0E*Wy2{1E z1!yyj(&%QlpXf06m=RWJiYSm7BRxL5r>6tLuG3F=*qblBl@?HW8|5NxeqK0W`56^= zlB!1r`d$XD%n!d6X#3nV%@1W13O5Zn07YCKp>NI1cHaJR?)3{A4TA3wQNB!=H#r+L zm0~VsOoCdA4X*`&-Lbi>{gEY0zAwsSYr$FZ_nKy6_1;kgL~;OzXI^row4H%;@t%E1 zKw)(5_Pyq=^nZvG)`0{AW2J5^g^}d_x~`Ru&NQFf7C5%dF``cTjIahHlFi2)sK#} ziI3`C(}=X6Jft_dq8~nprw7V}$qwKine0l(8YCwu!a1qA)(fZ5E!pQ%z@4}X?TMk( zvv#zg(8!=zB~rwgwTHJ1w5@8Wv|B&mz{4ADx;||Y;~(ymht=<*nqfJqg?X3upMewJ z;+cBRx@YWL(K#iN*U1_r^?w-rmARO9Y<-`#elQ!zYZ!l-#H>J&|3dfC3{7V9_KmfMXf+8TWcbbME_Jnm*@4UsT104f7S2R4v<5MA7pZ}+*B?< zQBnCJ!X@W(zF6;7OgS(>zls~Tan7maO|pgKEP6>Sf)6>~bq0r%FIVl#J>5>qmUdt1 zCA?bCI@!SJOhNZw)TST%w4Bl4twEu>pt4nz0I(%PAlJa4`Xt!5GhRPMb*8n9i9aaZ zY(o;a^~%3y4p7o^3sq|&6urk|p~2FkTFJW_Y;K=5HWuHF;Q*A%wQ70MkERIg){Hfj z!Md?v;6EjrBe6zo%$&cq&+R1pHubcBpQieJN;Ew)5aIA;Jo?g~{hmHS-CDzk_b3ODR=Q(^$%9@aeThhF7B#tl75nIK!p zjQa@71+M%x8EoL{3SL6u_AIpR7h0nwG8^QHhVXb-=DZJy~Vw))%ZO1cFRAD zsw~;m7?Js*b9#FkgjN6HWT{i8Fy`0*!7ur|kQ(vl>cgQaXvL9ol{tLRLKdgfWJTBa zRBehwR2juK13q59m)xEoqtUhu74g_EqTT~x4T>^4YzG6EXlf1KcL{@8uQPkg!}^T9m-*#KSP9`$)Zhs}Ej51VWkH zWx{V>fFFfH8zxKCsP(FAxuu>$z4L86#dKT71Sav8EhV8FJZ8%ctXBmQW584&2;fu^ zEdDDU$F1nXSg&*eMpa3?aF!K;ptT+=S+J2ut9C}=PAAg$x)cpH55Y&}33?Snosq0^ zMg%R^Zw1E+;08U06yd6e2PKQi_}>=InFjavxhfUZV#qymI?NFI0P4%G`QeK?{(cgX zHg2EBnQ6xwRtSAK_t`nmmf;hIF`!K}5|*H7Mr`1crDRIm6+?^Kya>z3>}^EUnjr(? zk#%1YRi|p3{>oH8{~z|s*gin8AN%m{jGOX{;rnb3Ccx%fIQM^6nNo*v=KOOx*c3`| z1LhPZ6nt1A){e=yKQR^I%)5*i(A%?ax53`49cJMV%>1q;P!WOO`LqaxX<3sA%mPRw zK6r}r!}n9BF|6GTLJ8Wll27QB+fokry^6`SiOy8ARhy5!F7qVmBd0gW5`Z&FJl7Ch z=ep9BIq0hKc{dEZhRPgYSn*eWfX%*p;rg>#_nKTr;RAj!z+UL_u`Ux#~d-I&%tToPkKw59B-Hg){ zNk5KLRF#Z>E{%O!-$rg_HtR+#^Bi^!YY8fz^E1}N*&sRtuM_udJ;s6K6bs@7J!IE# zn3=oj8TM(MV}-5l`fxaW77pTz{3f$g(%MsHAPjRZ&uV{tHBiQ!M}1vZx@*v}T#bb^ zRpkX*m9XHrlzDzTE(9U&l3GEwS0>CitX(wry`t*2xcxk;==Xir{;_GiBUb6`-JVTQ z?D73|D5s^eh0SSs7{vc%P}CL^`BhO@%02Acjl zE3B6rs1|ZSAQ|1pVM8b(p?nVNfS9ngQBt^0C6Zw-+jo>eIlpMfb_D4%jCR22N12s1t*l>1cohr zb;W}Dvm3t>t{j{2TH%#=%(YD=lBd<_#4nPNS40|-W-{=Hy94-ZoyHdFIc#+pIhG~O z8_z~%_S$CNDJrf@e&kR>7bfO0-F3nw2~^S8e6HH1-F(Nrlirb{=UUZPq_JWq%spM; zH>?^*AR(-s(?jk~+l0%e~XqTWPxIC+V9FLw?`QK0Bph%`%u6-E_ zb8d<{wNl3#U$uGF%sY)Y&AiO1;r5Pha4{DkJtL>@Z)oef=Ajs)Par;?Vq59z7*Q)x z(U&_Y_8?i=mu~?q&Xcj~9>IQ)_$wHOt0#jPz`=6702gKpTy$fi5;=F%C|>h0pT!F> zA8w<^!z$e{T=pi>jBb)V*H*Jdc(aTP&+|eoV9>60G>he=fd{_!Kz42APG1Vm)^*XL z(CYjw2=5|_H>Ckk%Y8mj8_K}JZF<_I)&u}Z+h@eR)|`Ulq7(l%Pq9tNI7Tu0j46r& z-(j4R|HK=w*UxKT>(!TZd_T>Ej2~AA;^s?&;ymc=%CcfN@2;`b_!Tq-krA~9?cfaZ z2O2>;3tueH&1?#NH>{UN8yaN&4cvU%1tl14D#TFE@+nl5-`X7Zt8)z1Rt+Yh4jSQ( z{AJ}v&tMhIffB`qnMn8KF?rqYvwzrtRWDG7DIx^vBVZ;MYn&a@ zYIu}n7yZni1T{j+Zf24G_TdzT6(^2bG{G$& z6ki@?Td?X-SblyMg~cR8wN>h?$-vMw8Nh%a z_%6{Kk+}|7J9ZFk4}y_SQUVSryZE+ZXc*}u>+m&QaoCp|iN2H6t8F_rFq+j+x56q> zw-D%Wt^Ix{PH9v+IE6AYFekbdV*ReZf^WJCzIIzsi6zrp=c1l>cgWiG>queG;lGVl0NFoNN35I za2Bm>b-nKh7ikiGoRpCa7JZPHlQEa1uXDznUDA5JH&XhRFF(K1(S=)7TJM0DuI;`n zyTA1*bj#9yi`6Z*Q>IJ73wbLemc3}>LwxPSBI05AE5@$+eVNmIOO9b0S2wc8z*70) zg3H8qI9>e&ySnkr5OBfH>{GPBXsXPU#JOr)-s`aa(YW>1U7*`Fd3T2}AL#kpy#MQ% z6_2XRO_ry(muV^*A#0%v-^niW;zq>8pL4*$thR|CW&8PATZry_rQ)*D;nVb#p>sZA z11V{ltg6EaPqie!eyDGbA$c(LXmyH;XV*WDT{RZUcm|0uAY;owxd2s_Hk->}DO;lK z4Sx)Q@K0#-EhDT4FLSkG>`B{5wY%8mrg}yLO;ULp$F>*UMiy80@h^qzF4gk((}ycf zQizV?@)`Eh-dHPL2ZSqy1yTca9_!(_0MpwIIlF1+hwh*PDGu8}^{zLw0ayh>_Gk79 zBaOM-$+^}E;1lM4%^e;kYvB$CbQ-L}nkkr)*$+ui^i@PKtCVhzP@t{)+gO^hyY8c){l_=?rS+hZ-)0#;)8$(<=T@dkEEjPh=SK}?7gzGr!&K`wt4*cTZZI0@-(f`tu(VxJ1AnFh&cBspa{3ovHn&WJ z+TV)?MioWleQo^G=5Rzb*3yahn3`H>-91Ud(KD6yAS%O~JOw4scuba?>wweRjdpiF zJ1J|*_<8!(%H)7(ZTyR-6^7(r%WZl)`+=a`?iO~Vwaa+Tf4UhOIJXuu*_CF zIFsidXrG%?_;+X#&q={5>oS_f7{y3NvT54@yM$W0mwJkv(a_9)K6}wE8IYqiZem1b z#RI=5M!~u-_?o%b{kAd*PybWO?(4E&Vc@41Vj3sWD-=r|UwwPHX8koql012zd2wf- z%c7e=^RVwXYxpObHP{6dDL@M>oCr`$^0bx(;u(GC5m?Fr45lwKDLZvP{i2bN@?JL8 z%vcD=^?*GHLr{CxQ!AlXOzUmQm{3eD8F#P=?G|4OcXo%h^nc*#-@t3=Yq(I)@F0i@ z9yLhvosHiJAKVbHz0Jo^3q~}mTQ)bmjjtvPD|-D>OMjg93e>Z?kklT6`ESie52g8H+k&Hy7pJ z_}4X41ptIb#w2{)joi9>*2~x0`eC`5E%qYcfAeCo7b9%^r_$ahH8k=;F#&n&6KZJ* zVv)F6{s9Il`&kQVJ5!t#3ZhdN;?M$Fr_7Nv3tKm1$Eu)%NV{!LM-%GdNty36jXn*R zNd8Zk(R{OF)IS+XtNs>epH9H$0^R4&gzI~xf2m`G1l$~Zcje1libWhvu7%Gjlk5!f z{#UgiXYlT9C?FJNwLT!*sFeKix_+px#sM7hp^|?*tYJ>L@;N&wxV>4$51?jKX0P_R zK-9%yi%cF*+d>W?bV4f0AmhseA8OQg1-~Wu*K50K<8dDoC4IwkwW;=qiHOnWIbYfz zd1^P78R?}PN%L|Voekcgg(()c9hSTtRVP`FWAd29LpozEjj{{E6k99pgx^fFNO79Q ztFTLEUr<<93v9nG5J&xu76xVjU?*62)&*C+!_e%`m!C#2kBv7;5@Rz>Ji=+fNE~*- zKkty%x6H#8?#fpluGi4tv3HjzN|V==oE$iz_r>lri?Gp7@2CQCtd{kie?qmd z^6!sy<7#;m&nVSXWRY_uta(|rk`AQWMjiaaV@sbgO;ME`-ty&7upqDQ!RAfPZLk`( z9q;=6hUuV5+~CDr`FxnT$7aa)b?k;q8$$5%YsDU(Zw#JOtdPTeo#3ZHuuL>-czYgD z`Ltj#?U;?}?aztjL#$&{J+cCl8RHoL*9$3UwPY??&pB??^RAh{pD9!;{acs3{Z<;2 zkHN2>zrpP#B^za_Rcp-WQJ4+Z>}fvJ;StEmXes_n?u{=p+Mg*5b^2eZ;zj=aVc4;7 zg>JjAYkq~bpJB>X<5^gCFL%5HoaG8!3;ZQjJ?ilJ9=W4FXu>I`=Du|G^~T!ciKi9{ zfz9u}A}d35dWgOHd;!U=SIdW9DW|RlG>{mDJVd_{co=piDXX0gw@%9hx6l0{yEVJa zl4yp^!1FEau32uU8QREMZt{(O9$dkp%81{8b<*2_qc$`c`N5LGi=^J8!O#w5OUv@* zXK-UwVk2cn>O%A+Om|NN%cNW5IP zuG0ZLmsK;Xjp+b+uc}V|Kd^<#SLDHaYMnI8pBZ;Jd{KjHW?J4xEaw%=dq+^%u9J7a z1ntg}19$I57sgr1#xd*k#00REQxVhr3r(f7_*Qh8REk&fdiki=Lu?H1IdX>yOVmRq zSohF=<^hV;OtzX*L$&?to1;QHSxsk;-G=mfd+F}xoX-bXY^gq$*dL?^y1z(RGBP0Q z@9IGoDZI@(48+&JUR|C++XrXXJ=o`7D5bVDUFqFc%#%;`4otI}F#?SSzMy5SE`0T9 zzZ=B5hc!|(GxG4Co24Go>L8Pwu^UGpXGtb=bng^AL+(gDw`TGGLX*2CBrmmcNmr{o zcXvT(=(L)}I`~nvfhU|-%HJg*eKf89DDI}Yt^xX_>V8r`aC)F?sBw^cPEx*Re@Dse zr5rsq!n)6$tY=0B3al{>q|z{>uQ75b>Y6#LY!_Zzxz z^cjF792bF_{Vy`y*#Op%_mhb_o9W&V@ajppV$ucq+m+EATHYk*4eZ+$tVucQNUq-; znlX(S`s?E$moWsiFPLg6WZ*?cE*p@SEM$rA>BYk7n|t`^7c`Y*8)tS4Fh}wfo#N(Y z*d_j4*3CngurD1pLD981)v?5#q)XsWR@G1aVGR_si<*7cqqWfVL5 z{bybKv-G?&!vShw_Qv^B^D#`~CcPZK;&$$O=oj+qv+kz=Lt_Hv818>Z%a?ZVfJr$bJ>`Tcm}{c zT@)5|TET^oeyiL436Ian+>Ti>?p%-tN4oI?04V$wQ2O+EQ^7I$pMtjWj<-v;>hn04 zu?&`^rE}hhTQFz$`Yu_T!l0_8gHR~S3lztBuKwiXPJ908#*%=)x9=5KUKqvWp6X{U z)9ldG=iPGc>1B20)`D;5%VCFf9&kz)jc&NCgiIu>G@W^pKSXy!TpHNw)*3?-7PE~! zawa6_OB4=p$h_4bAecHvqTlCg^&n72A;@7R>vz;-*qAdY(1Z706`HJJwIpcvduFrZ zjr?;9YYre0nV^OPXj0je^>+ni(>7baURjLZb@fba1{V$6$hm3ruqnENfn8osIbrA;M3j`6Ge?haofjYX0o zh`81KSt1P$gH0yO7W+7Q0hY+Bap%7C=*>$B8Iy+y;OqatHRc2I|7*2Tid94EV?&p! z#=Ngb<0M4@j?Jw85`>0;$U}gDK>eR4FgJH^dkeS!bbfVcIXJEHp}dQ1zX$)i{A2vp zO5Vg*C({T2??xCm{8@$Bc%)V*e$p&I;YD|R!`wh8YI{5Ga++MxsO-LEl)`Xd{>FcDM4{$rKi{afXksp}w3K(vsg~&Hl@!V{V zW^-SNV?1P08t49L6Z3r{*t$92j@hbFl9sxkDyk&kOkxhwG{5`E3gg`rR*;>lS*dFOq&Tk`Kpmy&C|0K&`?44e=4b#Fd2 zU7&{y)P5=Xpbb8CyzAu|Rw7OQ!2{H|Y;-02s-SvC=lwS&1Z;Ypb(>r1v`560;O~j8 z)%&^fe+Rgj>c-@LM262ox^>EM4#Gz>(hLqEaoMF~-mv|~(gZJvtkOfS7jg{n#YIEY zk{{5Q!$3nwCyGA_HMhY85RufA+3ANqP2%+^1UMU~7>- z)Hj4m$euiL570vhGeBC1x=g7GQWA%tp^q#nrxv)& zSQH^Vf4i*x%Px*z9G9}31j9oi!zBIytV)D|*>;D|vvL*+miP#v>Zxq!JlEKU-=`pq z_@MpZ^ZuiRD%-J>sm}*Za7pYRzf`^4S9U5L3Pz2UjXcWvuojBpCK~!HVa#N=^y>^Z z|FjF`*GGq^5mz|j;cIM9Es8*My##QpN|_$cji`}raBGiPEO;yX+09zU_;`IXc-#y=m?A!-luk$^6b*TMKzVz=kNu4rU3Dt`_DR?yfeDR{!;? z27P0VeI86;clpbgd7%wquNA7a{eMx^u+aLv-;wPhv#Q#8O`{25^)q!i*q*>Aspj#r zwxgV98_4ZCZ>r2?3vYHVH{*61q{6pa$kd_}UA_2r>r8zN+e3JdbkKET)O_7yeS!As)2c2&`zAGc>!G& zoqfhXtGlRx6~=|uAuOS2MtJ^rclX#SmRp;YUf1cJWOjpLv8Qd_<;Qm32>G}dW;ti0 zx~lXkA98xBMXboTIe|Gs-7x4|6~cv|j;4wFlwRgi)oS>_P3&T7mPKffKo%)RB(|o% zA(wiazn2TGP8%_2xePK}Z5Km))ts#f`2!Pw>o0?@^{gjTYY^p`wb$d+W7zTqjc#YJ z{sj@p{M&Sy3NGiFLd~uE9l+W^i>_$D&TBmg`6}2(`Ame_npJkWiipk>l*#r*Z7__pwOjGed*8;t3sgKfJ$q;$c2Y% z?AWSvRg4!lb-%_orI))?ZTVQ3J%18pZ(%u`c}-i`H*rH9F$mB7x==4n6|6AaS!&sP zO_f;S(7sZCqXfE9Q&m*z7Zkw?J69e@I_&uyk4Xg;*T>p)SSw}Mo>w-E;J2wUoXut3 zZV9$)p!xQ~%mJbJq90fQK`N3NTs^P!&MtFZ>pchd6lJa(u6G` z^)`ht<`eSznPC=C56CYi1;4mFJJXuUZDM-`Q&q6~gc9#XvsJi2$X#I4p{F{}8jwzK``V;!-zad#lL`AXyZBmv`m#eIk!{qrzgD+WC> zpe=(1k??*%ocZvQZOa}rMKcibIpM44*FwQ4=AQ4)-*tOo3oj1jt38~RR~Gs-^np6i z5tBEtzj0H9QL?}@o2nUCuGSXLHZNl$T#^@wZyJpclbR{%D&;2f4sE!Z6yOdS@Qw-- zHK*Y?E4A# z(ObUa_(p=DHC@ONN$ahw)h`i96o99Gl;DtCs0lkHYA6mU=(P$d8B{DX3Cuo-P2q1a zoT#^8YxghAl9IH)N{aHo?JJkQ>G&wC-LY&eiVsHH<{@PXw(i0N8JEjIan2S;_ao2l z=`PshwD~@w_8iTZssE+0ap*&fti5{5`ay1&x`~v8HuGaTiw`ki;a1Ca?-qFKjwCjE znGrq*;Yszq$m~f15av46-UV|HO5!MkaaJ!Puah~>Y7DPJ;OKA=W;(+EP$Eh4#qj)< zR7|Hgw=^nvWvkvX&}58i;^^V|n7Yn^CKwY!Ywusi{L6EB(-kpiZ(yDAdw=hWjOe7e zU|`1q0Gi9i%QT>wj+nDGR}L78^yk;yGo6{elPGHJ5zTk8f1Yw&JxYo8B#*yxqF_dv zm%1uaBu&uR%a6Q47SOjwhkgp_!v|52a+<|MZj7O9wb2jXd<58&)$(OoXf@3?@*xFU zOtQwU5xfbHF(@ zVw1eqocTh0EYk7n0`dCX1R&hLUW6-hoJFFId{Ju;H~HdvFk$6^ltnzuAFoj#Jbk{$*RBsFml$X|E2(E(BSAg}au0vld5poeWKna;|Z>Ne_gy+`> zd|~Z61FmC1NZ>&ExbFu_;Yw`BhPY)6XE*;NQVb*xmyq|m!_kKQQAWQN3nQVzXzvrI zjB^}^7o;#(v!&t}9{!6j{A{D``(atm6T~YjWqwZX6$!9}Ul{hI#PkK`ODEQr`@LF7 z`#-X13S5RZR?KR+G8K`#kiV+CzwS1!znKMk?qlBKhd!yE1ui-3_s!up8d%4xmKq2! zz(%dQ?!ukke!OEP`_aXI6QUz)mK>{uwnR@_o%dk-tHMKt*oe7$cz+*&m*g$~wz4&> zn2#%my9@{PM>sBYaE(w74S`mN>(>3k5b#9)8}4^z`I0oMJ~97~v+?P(M1YfIeN_pY zkQ3z6ERQnMh9_5&!{xUS)_}8qy=dPs|7*V+@H@}jEyA(i+V7kmUDF?iExh<01z$P* z*)&5aB83Ga6vV7wek<%c-P6bU{Y$ocHNBb4S{300MrfGeciNxL!Mavfqp^jKq^Zs4 ztmCPygu{0AsEA6Dt~o=h-bt-*G;+^VcKk$6GvT#hxZWU3*ho)2Y3$5Vtc8$^6! z^{a_SA{nB52MhlO@q~i9&-2t_*u+(!kOz{W0l=CxUFAj7XA6Yo{grv@B=5gzY`wj_GAt|`vKR(Ds7pl8;t9G1r%%Wp1zIi=bWUckD@JT6p%Y6ZyD{ag{7_od;W^0&foW1~=Mb z;%BRI;fK$kOU!59eHAf;qp3nl|B~nw3Tf5nG5$8^FtMS;qX{QDDRN| zY)(D!3;4pPIh}4MiJRw|lv~zPR2(A|sx}?C$2@E+q8Jo;R?81Ft{1`LmN#Qu#%%Yrr;IHqu^U-_8)nhUji>7f}M3h#g z3tHe?(dW}2rQHJYhGlMAa(fC3rp+F&T_c$NT6i2Q6MpQXgGPRr*oETMg3i1Zgqy|$ z!lw*ifqFPycBK?;Bg@(SdjI@IW8D58zgaJlyCIaK=bh53ra!>2mdt0A*Z zBNZT9uSBn`ojn_7Q(R(veyucB>l2D3kgF(w1Hy=Z!0<<$7MV$-=o;Q2_XZQ?=In@w z@p3&1fAvug{$^xOZ$Xw{1QEjbhl^3+TZxUbDH6c}3yPu{UZw-iE4$p<3E&HOne?M$ zCuVC8Eclb1s-MVhpJ{B8Wq3UU4tE>uB2CWstEVy?ON5 zFw%9e)q#_dAc1PC z{bbmoTgtC!sF%#4D!lS*)VBBgm{?X^UF7Qy3lfATfR~3^K!su5<51_(mCFU{$;Za_Jg?C&554YtbZ5_TY$Hp$FDM@ow^{E_8xH=oef-vU64^u10&+(=;6#e zIW6E5pd=BI8tT)fU_QKw@hw=5j*}BLa4x>RWW>1)+td5FIA1!j<7bsbW)?;7++w|U z{q#AJK}FuUP=FZIpikfM^AB|Pjv5XXMTTDgUV``8ywb40$ozJ*1UvE)yd=*GE;>Fu zCMSc=i@9^lPHx`cacLCej~(TrqACL6DC6hUWv$3&9h~`RH8}m=>;J$!p^Bj;&-r6L zk)$tkAv1vWYufK!@W%LmVo1(+UAX@}fcv7a4mko+F<>VAzt0?gZjt}@_X0{akcJZH z1XXk5Fnv>mgkt{OK*K?NmZc!bA^z_w)&I)`0Wl>2A~7T-{J;0z|7QRfNXJkd>P`-n zWvBp20Xj5Pg#syp@Rg`R21X1}RZ5@;qwi1+%AhSHe!~Aoyw7474BY?h-v5sj2@t2T zIHWJg! { + 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 224/336] [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 225/336] [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 226/336] [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 227/336] [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 228/336] [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 229/336] [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 230/336] [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 zcmX_mb6j9w(08_7n{C_PY`ZqwuA6Oaw!PV|&9>cUYs2>Td*0{s{B!RggEKRC?#wyg zGhxG^!9$?G)Sw{`0;@`ElC`1n0ey!oW(>c)rq6(Pg?do2AQ{>uW`=oAb(&z5aeS=DS)cV`*mrWNTrn=Y4CU?DN(Pb7=Y#i;bX;a2C`56B#|9YxX zYmO=xjq%KplRjNnj<@$yXQrhm_Pa9X5@_j)zJp2YVXi6 z8EF82fM{^;G1sqfC}{c~OpF{Zvz760Xl{e~tde8N#=%OWBJu28N)0h_4@?*!-X?rO#v z-}!gMer2jVO+3YyBa5t$Irx)xdkaf>X~Hb03f9_3iy z=-=RZW}$%fU%HP8_gOmZh%2-2!HXfd>#7pJqjZjjJda|q*)+@(%o-8@!oa$V-9uhK zwrU`EF42HOM8+qhDEfUXBW(VFMah22wPAWM$(m=@FLkkIHKnCAdJsAWSwt(C-vn)>|XZP6~abacmnHt4*Ih=v2aGGMH83+;J|` zF54?a3t7R{qimLBYB>wD@YI2sRicaM+5T@G_%SprKbIh@)DU?Df(p1AMtAo63MxXiwjMZg_Zn{Ql&%r+W?_MO zw7E&Jr|{&2C!67$FXqW_!M-vYIT*x5npIJi2k7=Ol2BZN>eDpap%XdM3Y!mF6OWWZ zwXPj$E%}DcZ;PlKLpM#fVb0tD5mr3W z7x?0K1%Sq&lUGGMG$D)dhC*Cxl72)e)sZ(8Ox)ptO@-z@8`Q>`&}gty)^s zU7K&U($goE6PB$z6U@Q5c}E_u!vb z1TFdC5yd*hk^fF-dV$Z|5ySYMf3KHmdH?l zpJDf{JD(pypVzk|dA*;v@xA{4_KtSqi2VPaJ|ld@hsXne**-oEdqY}Z7UDl&kIIOE zx|-hcW$dk|lG;T(lgNad^$&GH0;D|F7XE`siwK@-z!26&_l14tB#}?*4CVLfM78TH z3Snx#Ag=ihxnlSVZs#2y%Zb~-rU6l1nbS=JvqyrlftRMA8+Up=9W-h%5~bWVPK%*O~NW?+hOgH8T-ExtGcZ#wfn?E2Wz{|E`T1z#gUv$-D;o5XRkF$kcQ@_Fh& zGr_w+qoSK!pIIOOb^Je-lSBOz1Dhg2Uf;N1P92$lXd;mwd$O^8k{Q3^@V^}@nU7xo zM-Ri5W8E9xGX|~GBhNpW^1L0*A5#UYIgbs{W`7kyVONdqmSn+@+S5vc71h7fPJ!Q~ zjtV;j<8pYO$b&L%b$LeI9ZdCHHKRmu;kK6SGT+y_I^H&HOcJ0~5hboq^~T#0M-=?wlaa zdm*iQ-ppo#83>Aq+HOx$4U_3+3iK0L7um+-<%cha5EzIFL-TT5a4!AcPc5+RdgiJ# z;pi8$f%E(efmd(nCf?oNw|M2k-QC*=Bfst-ku}_u3 zPLr+WZyP>q&in)K`mXej|7+u9PYkll_bCLqzep3QYn7?VmFSG$SeohgL*u{SbBGT` z&yFS3Ytp|AQ+q4TFV4^Qv1O4Lh8K<9mSAVROx5^K_hg-@ki~^hegTEDOvhzHNw83Yj8|Bn7q!hXbW{}H>XSud z)~R^YAl~XaR0yZtTF{x~M$mtpodo;pyQF?n$GHw$V~~4; z@{24u4ITpqEWEKma5=~iw#>XkvY-|$Ja$ebY5&Ht7R-QGE=m5Uo2l46>v|@YZeTypAgHswEf&X1{Nz<=WqL_<&xCgVRqb4 ze*8vQ>ZH(H3P9+imUZ*g(u8^r;Z&M1u{jbt&NDC;=R$bQ!}(P;@)$1lIV}H>a!g_z zuA?UQIri0g?Bo>pVwRZ~fux;*9-;1Nq=4`gf~2S2RtbAfRY4?>pg^QqW_FPDPj4=^ z-;MuJ1imsH=pG!LWA)?&8EqhR1qlNE{1)~aU*&xwWCC%!G_y0fh9n(5dQUaRazn&Y z_5m~2O7ju%s)+W38w7>?st|nF*eP7bYY!pc5~Hn_QP4;;w8gHs{-Nf3{QZMc6PQ7F zA1n-%+wTXAwazW_qD*8@tx~T9P+kE&`d}(>b&et~;BFt;Q8J^2PD;`2)g>WKP=LKE zAWczv%B|&(IyxHqHbY&Ph|sc~;m#pzqE)X-It2RnH(!3ebMe9ubOor$60}CPn#=@) zyc+@E;Et8iUnWgi9TArYW(m1M0{H)_(q+2S?oA}kVRDZx+@|_B`(d7@ZS7@98Mb1n zICcu`X+U;8=+=FF@jRmRek*^QVg&C!%27<@RJ~4G5G#fAJgqlCXd)!T=9OUTQt^Hi zypwL6==%YIh>fO*97(%dvf~{)`x^Tm_Od1X@gK>->yK)2-(&LAY^e*?QmRODdkhMm zR($z$qGF~#6d{@Ad$EA+>E@W1+3b)5phv_%cMWy+AIX1$4|(LFDqI=!rqaP;cJ;to zw7Z$!%zHC`z75XG9ub>D)RL2_OfAH4tnDJm#oul8&_`vl8w(* z;i;H6^9M9^Rg_I5KU25zuWnP77t;EZC1+oxeLUCBk(eg(rIEh}x%C9>AOeeD@d(_x zn?7K5g&L>po7p_tP9>_)4>uPaUxY62aurafk4%*k+x@3e`<)k!8c;#= z$Kj#{L_*q!4zW-iDPI{wpoufs8#`p{dk3ySvSvJIPM7zn0w_}+CTrpSuhTl)3LmJq z-|F|EBe8P#Ml{z`gVu1KM|hwFPm?QT!IZTX=B`uh@p|_tXnoOwo>-)p^a#y2EDk29FTNNZ{Ez;Wws#XON}PmdFA2+{6Z05MURh_=%7s2tOt z#@Gy-4zI(^aJ#O{3tN+XMZQ?mS<|4!si&zM_Nib70SCe-<-Q3kh_&w_@_cLalN?hD z^mQtlBh19a4uoJTeX=Vsp!Mx{-&@#SDO-_lOsvY^`C7u(05o%w1E#S%V=03v^%~ce z4i6Vf(WxzO7=53a)4>cnBH8~SJYh(-u;T_lO490L^vNgbpvoF}BY3Y)zVUk$W*NrV z7*^t1qZezm2nlb5Or3OiJ=_7$H<<{zv64$M3YEu3_eNvfk1G112G&Kvn{%Dv`=&RO zvP&@rmFBC>KxT|8(^sJ_;pD|jBW$@BwBYN&?N-x-?i>^|jJ-Ok`rcR(zTY)N6K5~! zvAE=(x8B-=w>763PfO>SKGC`Vt#8%2aSd=^55Jk^ytypH4mB!WjIp@6yxH5M!R5!* z8vg08nyOJYD7Mi6a9wldUqGiN4~hVE(YkpK<_z zqf@45QxNZG%48XZr%VlTZ1HCj3Gg2r$oSHmOGD(CxabquL~-<4i}WPEz%^X6ZP5!d zJ`|tq;S=%6@CE`mUEB4>F1hsyA}`RtwzE#>ew~C{2}Z?d0q1{h(}~*Uaqt z5u#525xgI840x|fK`9zo4gWMITUG^vShlX5#L^dK7nzJz_(kpM%r5lrqtLK5&!1}G54=F6M_j1n)gtdi0iR)6n=6@tN_SjHa#Em z>-}-bwNjp1rQ#3)oneeBek&HxDhB!-C%vSm{~(QxUJ|)SUelUv5_0wXX$ou;0O&sw-V#)l-Aqc znc3ufGTqY4T3Bo6ANNU^3-VVCNM}e4#%IuvDHy>d_Dfn=N7X{Gk(Fsq#`vxpT6QZC ziz6tPTPJ(zgvPUq=FaIwO7fLIYO#_1U?IEx2c(Slv&N(VH{GdDKy4PCiQMdoRz_Z_ z#oqI5F9a;o+wn}5zROc;I@I7hD7p|m93n+w0CoelUb#93j`a;89223a+U$Z;zEnIx z_NlRrifLMVonaAG1A1r2I07P-4Kf`Z)BREDy!}k(#-kWqL)9L^P>+OemG1zNQjOrJ zR%7fDj%nmTbhs!c@bK{0B7GnU8ofF&1asB&TdUh?Y+E}Z!K;K%N%LaSL|XZ=H-0JW}7&1>(vT@Dcm-Cq93py-{@tQ~>ZJo5<> zM2^pD`|>G+-Tgox^?KMSiGoDIIqVisBaYsv0W;Y@9g+y6nmj&ruACwg%0Asa*!C$A z16at_*waG5ikO7m6C^hBW>uZM5$so*zfsbCe_c zB8|aJ4O3HBb_7`InHB~Nu6U^$5E3)M98M%7ePKsa)-AIIfq6+8!p_I3LR~0KP385y zVG-X{xbp85>fU~|&r#QxaiD)m+Y=rk2e4VhRP2CLRF?7Nl!o;;KTueL1KE(LNHHfn zabiQ$;h}mI?kWfc$sscX$vu?wVqVSNN=U+%s6e*GTYEwGuNcO|nB+b{s$676TIg-6 zNQfM&%VFqc^w$*b2Ij|k+z)3J3P+IQn_f`AN^9GVrcuI=x=~>!tjwJcs8jOWY3(G2 zlK|9MC{1qJ?y}y!WXMvo9B|vP6Sz}hNTX6A^x4wC(;VVksKgaA&|WX34hRqxzV70Z(uD!Ui7zb5j<;iaQNDPPa>Pm0#6&|h^~RnU zvtW^6LBH__Qh`a#@iJv$O6fvj;c{{FwPTO+qdDvYkmTe+Cnf6?2ba^DsN=wb3xH;a zDJ)1JkU-o=v^z0I5{1gY?k;93Ofr_0sn+|Can&x5M4~5g9{H^$F(GmTUaXD!<9CPO zWatea|LP^Ew3l4bkWJ3POQSZhkYVP>q`-p8i8b0DQch{p2&F_^?{3GG$cd$>z+t7t zZUgjcs!#`&ic)iyH%o8vz7zVhA&MIe}LKFX7Pv_EVAwxP67v@HQ#)+VUQ( z6H{t56q9I(;sQ@$=HRhowJ^LI+Z3I{HoQVhLdiVEg+89!?K5$UnYx1Bcb1)|{bM zJWtEC-~-+;tSVkqY~gLxR*W${Ea4~^urMNt0qht=tWv^j_ybBs0%Wz7SH@Mro8aaEai2N@vAr&K1hx(}?3dYrUvV0gFhAj*tN-4$zK80cgj@KBs)P7`Lw;Noz z0};6#P|2~_!doL?__hE>ZVoC^tl?{t;Pc(>E&P*)Q|!H5jk zfec*-)?nfTd#15&8Mv;8MTWeaaj|MspY-WO9ziB`w; zYEE|RAtC*vzk?cn{$ZrI#C)7J3Pw>QDgMhEr>CH1GFgbRc!}_u+MmDFSMmy^_(!+p zsl`_0Z&^fF%LKmP+j6S$Oa6HcmPOhXWn#k>=Li@AANvD44E^@yN`gl2Ve`0>SmqvS zUdO1=VlX@)E)^giL@rXZt&2zVGt0kKh~^5B!-&RO4T7@`0~*e|1xJw_HsUS)j-MsX zCF`s``;}^IX3r8|Bvz5PQw=r<3%##Q5d(JC4~+C`r~JzQV`0EAh*#pDS}%X}bRVbH zY7!$1ghWt4HY?olNoG}>d?axKhX+5T9+R5GZbB`x#J+$Itd33I3!p}WXs|(-K`MjM#G?obsF(y-W7`PL66hbMXbnLJ z6G|63e_Kq-t_EhEf7 zjujF#V~0c`c!j_k0&~Ox8e51Q4e8=i*xf#pmDn&a-9$wAr<5ta778<$7mPgEAi7?= zG{d~`E67@GIx`cLtct-7j z*hmNI3FNeBODQbC!1A2n5q>x+RLbz=&-Hv1jQWhRlWBH-oFezTtBu&hprSZq5Wc?& zb@}R=f2A)C0$UuTdgLz(x_%{8MGl4#icHK$>p^zV#Ges^g(Qr2UnItUrLr1;Aj!LF z627!VvAghXt6Iv!DFhuAPB~@J)gJqN!WrotfmCd5Xj`+Ky5MNxlf6o8LaB}Fvt?Tz z@wue)kV;gf&Vr|f5b;lHB?BgS!v^XM-4=FKqmAe98YCeyiy4}p{am}LKDqySN(MGmBJrX(5Sfu`@m$?aL# zsSMxeCrNDNxeF6!8;7*&&5IzK=j>B%@{ZsNEH%27xDnd( zq#+`nOk$D!T8e(?7`c;eBJ7HKy6T0CSZ3a(h?8ctX}1wUq$jN*vVbue3L+vJa@c?; zvjCD-T#pDlVY3@*e3Z&9N<$$fVQuoR#P|;$S!Rq#=rMxzZpQc~Q1_M_4P8yp{^VUJ z{Df@#4MJvklK7@ABr7Ob$kLbjC(BOg+V!LznCHC1YO^Oa!Hsw&Wjt2Nw7c)CN&oVx z(IDkWB;P0!c_B(s&Vf9Q?%fV0`K$x#w$a0%GE%%>`!np(IlS3l_AP3L#972n4b?)T z-6lhfC~Q1!oFcTiD4g<1E}X^KD9bR9*9$C#XtGB_?Flb4lkr%X(c+{3^b)u?W4@{u z+P=_U^oyIi9nI%h=n!D;-*jRyB>D8QGmg&+ijD?p8kB#R2uueWQ4#YeLj>mkRt=06 zu|7qW%VbGJ*S$KRQ%lLMufdZ1?$jWxFrA=;vdE25`@SdoNPg)42CE<{lH}`n+?lB| z7?_<*a)q9v6uZ1oAd5_a!hz08!>W%#m;StDJ62~yYMM0NzCjN!X8g5#UWJW{7=0@K zRT7N`L%V*U3edpW&9woVs1oQ{ka~6svi7_hGxi3yP=w~F`ghdEvP7W;3I$WDy;b&z z7^skk@#Lv8L#hgNhS`MyEx$!ZQ>=UGsLw)G$&xiu-|{lw?7Fqu;$=sx(TUFp&c>H^ zh^e;sl9FU~DNZ%7$?R zQ;T__6eV!;+Gua}uE8griRr(51Q(=)E2%Y@rmFgzXS*o2&|tzO*qB2hA@2BP8tBYm)KI1<^UQdey73 ztml8zM`ME&$iQK;p}aMxJM`yB$&dU{Yz(E2;=ODqio#P@i($OYfbW)}XH{!@3sc1i zpnMXFr0$b4qOO{~FU}W19X?4aZJ#~IF_KIi1_GExb=4ZSnCF8Dx|>I0#KEu0#uqD} z#atto^iJH^rKS@eV2b@w-G4Om#SQe^t}ZZcg?Vbmw46w!*-wQUK!@O4kbsi#qj1u; z@Wp|N+V|2_3j-K_(`TB3O1g)aUxByv%V1dfFO zDf1gnurz%sHHryLcm&_s_T(fZxr1U8An5DU5n@j|SJZzf7y3{qUDArP7 z$er^ovgXGsx}Gyv{n^x{2Q#Z$Nc?1&iZZd41RA9CBIF2o@^4%;=(H30O|)*~a?8eG zL&TCoVXQi73>3`E;`@tZvv^$m)Hn$d^EZKvxke^>QjZ^sBUI0c5CgeCkxVM60CUpR z59W4D@1i-)Fxe+c^9Ob$DPn1SsTSp!wewBQc6H^}gFs?VDdN=}sIgHk43j6HA%0vh z?S*SpG}wmRcatg}4%H-9b&hWwp=i$;fBT)?NL}OfY(*6Lz*Hpn1yy)E`QDs97)wId zKglZ~;=oM&UM}=~ShMf&KU2q;C5d?ui|rR#*J>g1&c*ndxRfN~g(0Fdk`Z z-O{z1Ez~~!0xatp0(u~D7R>pbzujCB;1Lfo|p zVEo8@c&x8K8B($c;Gy3*s~0uQkVC}qvwTk4Iz~C7h-u87ie#A>m?Q)!lk4k!(xOp| zMl(Z3CeKv9&)Lh{o63?1p2kY<3^2N7rmU@dpFo7p5nFv75&q8EbC064;Nqi{opQdC z@k`EwpJr{{7fzg5_4eVDUR?CrTZOD$inJi@Zw1i{Z`|uW2$Jn<78|sjPXFYUmw7h& z({CSGj9?m=Ria!cjIIO-cV(T-IH-Y>_|><+4h6ljpngLD-;jk-l>omL45So}+H;rHLQar2{Xzb=A^NVNl2EP+UgMwI#jXshz`$Gi8gWYu_(-G{*NfEMK zz}H^viI!7pFyIbzIGPJfhKpF@5JEHw2MOD=m4l(^CviXuWZ|T1A&LjWOmz)pjw2Qt z6H`_TF5f%L&%_U!d8MhyPo7xe+#tZm!4%@(!!7PX-7*^?p*D_P2$G#CK^V1Eh)F6A z{u-pHI*wVl4ekaCP^WXHsaDnoPAlLO$PZ^duzetDAaQ5F9+osDgq4FTVjSFJVp1(65~^jp zzd+Dmf`AUNd2_;~J0o~1hUi@2t~eJZ`JeZoZ=}nUwG5uzc8VLBNGj^@6a9Aw#AeJyDmaeTs&})@sHK}>>tu2SqJ^3-=V*_dRV(+LyF0_;L{hzr&fx$ zByw;gD1M}i&!0ObRB?-l9#pFLZNUMnct6Et3;AjR1z}IZ9_R>4glN$pw$Fr@=OZWA zTv(9rs9MxX>v&g1)T}fcOhF8ZX;Mlf#Chcj7| zeMu6DD+GKl{=OQ&Mi=O$`4O^7Ah3`BY0y~i}*Ul^L$3~(|ZC^X*f5cRYO*HdJ2s1?iu9(-3R$vFm zDnL#%E0Pg@Eksti2vahRQFij=^dX``905X>YoO{@BcK4kprz75mmAv9zh(=bot7O( zKZqVu01?6*lLaM01hVSf;|MncI*3`cyl2gJ)G?>vk2-ubllHDJ0<#*7#lNL(SaI^sdsaKoJsJK3Ua_tWPfIxa{y zlY+5WTc)!D7ebkMoW5TJ)z4Ly9bpnm0Y$u6VtWi?pgDs@HgB>6Jkg?G7^MMr1I1p9 zAF1uew()63%2X#rvMe%)?oH}JQ|c-wpBXE?EXE|X{H}Zh4H?QfPf3!R254JE+zIlG zr9BZ(Gm!mi8j!~%Up}EWGwb5xMT`W}dmYpsS3Z*d8CRa0(ppq+>HWp#jR!S}VS)Tm0dWFb8f#*iLSyH(17{D{DmU*q2+0fW#)xPu!KTlMbm1Ix}kJb72`C_HLh_} z^Zje+fDgFLHu^UAdY0~k%v1M{jz=vXbrM51r%-~)tZgI?%Drbf5S#&B^4r|Nk0{~; zF%z^cMJoy8+_#nrkKWTdRjOk3j5FT3?5(K~_iU$I-4#k#ATBU$Ay77&qNEPXSh({0 zfUs~Mw1WWl>lu|Zy^?s{yVm^{KW!nlzV%mv_}rs6W1)pfLcSRp(K4lL7E_N>qWb-0 z=5OAew}{kHh1`h%|e-G`3h$tIg$hEO43V|O5^itR0nza z$D73q>w_@KapBl1hf=83%)2~}&{_|_@?4_ICifM@9xvu8#v&8#Tjf2evvJa4_mHOgpW`XF(O?Mh;%t#@H_~ov3s+s(kEU z#OnH#)S?cWOBgN~x?d#aK!hc=pakQ2qQ6KijB27{gteufHs1_QHfMg++N%I1M*bZbOBu3R??#y2YRex6(g zJ^W;v<^<}5RBHq<=RP%goG@vzTVqkr;-wHT$|V>rKWVdq?~P?P72YJ5N#w&u?wCtJ zqRkpU6lC~jni6J*gxIYm3axYp zWTA@Hx=5?zY1a@#4))j46-Bje_Y4#CxgYw)(`O`Z1|@hDU-B|bGSZ$`h|RG*ZgKcXr)1gXb_hV62`fhI7#l3Dzu$J zk{g0F{JQ515?-bC_uncNN0EX`f(R@K8|+Ul+no1~{14a}F|&Wf79nEh5mS2kX_P-V zXPh=KOD@A0qRQHh?POoq!^U=|@Ky@;?kxwj`c&v^A9|4);j2!kC9S;?8 zJxx_J_<7$tNYU+Fpb0A$6$B7tq`(A~G_>bH7HH?q7$Kz6PQ(T6uGxE(B)GRXFv8Yvs@H@{YgUDeHVMC z+fQ<*j#&#tF|gFESygS>Ea?+KoI6?-=$$k-lFwN{mh?u|T+y3SI0JldH@3YZP@pha zkcedrGuAitCH@0S74*Gc$k>afSJRjL5HTuiinUMQO!JfY2Q1Zm(A>T!%4k1>CzX?l zBn-hXp!_x9hvAE<{!qaTVP2(n$AC=wNbDUPWz6DLlb#(s)Pb|+y`%Uc##maX*g#WM zb|KwGpxZ!+0EtvOR}0|a;$9L3msQu2)iJIKo^BKRyW7%aFfWp5K-DsAL2~#toThDE zLSxu3uMnAZ%TlZ(r^$_l8pQ2XqL6ZZ;)~|Kyvo?N7+g=S$KRD@%&a*+uT>@pJwAqW ze;WI`E7ve6Ck5xH&m_4MKqLGy4V~6rdtG$e63ndD=OrKci3Grkv5a6ogPca%hVn7i z@r|NuULH_g6`G6dKnP_Z2bsi`@jWvlrj9jYUbS__@zicWb37oWEsus8AUhOWO*(PB zUs67^FGI7-pXM-+G;j5bzU?Jpwa?m&NHbtNIaW^Du)euPo~>V< zuuV|VI%7PnI|1aT&`x@24FPp$u1x=}An;|}#aZs~e9^csyFRfy8Q3pJZ>9E zSsSj7Ox+d)Q`jA(w?nhy8w~IyE6x}P z4gx~@HQR{zHQMND%jDwfWozcb=xJv=q_JUtz=`6=Gz*}-)SjSCG$Tq!yWwNP+hRi| zf%%n?k5djri>PR~OMG^VskEfpwoFm_jETu1jSaG~Sx8RqAY?;6i(Ao31SUn}K#H?B zl$hw|3)xpW27=lBvSdjP!T?T$*}YZ&y{pzv1tw+@kWhla6u>vJnfFGKZe75Pyoz2$ z2Ba#`#v#franAclI96SfOc%1p{Xrd3BaZ*IKjk9Kt>N(@XiL8HL(FEpoQInpr(=i@b3k@UH zi!4JeFmO@iFk8Y%;XRIS(z2#}YuQ*~tv^fE#&M1C*$J+`_4nxAjVD&rX~Uh>x=Ocv=}1c&{sAA>L(mpxKrQ%$WLpJH!p*fj6)k z%djid3B4+Y9g(ZK*<}L{QPX#P%MJ1UcfrU#dbE(l{VMt@j}q|DdDZAd;U$kR2c)-5 zI!6K8v)2Ne?n8Oe5OIR6*UXiU`}W2R$!))^r3i0*_0HNT^`#Q0V#7kc7 zh_?xGwsFv`k!?m;FO){R!xFrO<8L*CdSy;-lyD*zL@_LtJQO+5E;c?q*xeba2gLvs3-!96u+f zS^2@PH@0t!gei+`5BwxR1HLVl*UgJOGd}T=Fd5x1D=(?ePG&cEX>yDiw5nhnJ=n?ISoKyFU+u#Vl`6ZAqk zp7+n+_Ri42R&w_M-X%H5b#LX5A{l zV0&v@EmPS`f!p5z5UNwh!MGovV72!iKgT>+ro~vb&!mkP%o`AU%BI!>~+I(W+81!d&rFK$vBC)_=ch(*6uHil&Pto0rm_*P?9VD`G9ccM2&XQ&lJ7T@uJZ;;y?#R_L!_!#KGLtc< zv&@8l@a+c#FbMwJIeaG(9NvekWfHE}^L2R1!rv0=itWD2g#32DO#R@cgKM`cZ3BG1 z88V`%U00N#UZb$PHltNnvx)=1qWKNV#*A-+v%{oIijEPOtDHKaqDxuUHVD{|{!37d zrMJe`GGo*Eph zY&&922VKkE4kVoY_2Yz;)9uuEL`_M#x(II!w#>Y=UyS9*Dt4*JUjKzyQWPc~plaq! zjxzQy@u^ZYoS*l*qg>wC0LW+lC%MM&5d$z{OpQ(1nacWv6 z((ZfQz@XjeHiIQG-Kd3`*=ig;LDLV)w#u~Hc_h8x{l?v<-9G&%VuGchW@bz{oTf_% zHfP^o@ey07lAV#54wT9?23$=ss`msk-$WKC-GEon@I6`bXQ4I zM>@dWf>`X^+!lHW-9A(X6PQoMGaKfD6zDdo&%LlO?Ddv|7Gi(#Ca^0H(;s&1pTv}vA+{&HAZ;6x4r zaFDyCnP$E+Q0T4a;W(2R9ev`ITF(+}UX!w7jmg11OML3S&Rl_?%}F1JLhHFj6yhXt zi?UMJ_QHfRKyTDu!uu%IT1VqVecoe6*J`vR`cQyEB9%Xp%?f6#O4U#lnGT)MUlF7q zLyOZUw7gtHd88I$z^Dc*#igzk=jwU7cO|erLC54BYPmKk?z>~ ziuYkhcS_BP_TvwCN1vrsg@RNu`f?qVAcqBf*{@Xwx)VFo(ThJjUgwT5@5A>P$TOP;ZO6RayRq04@(|~HWX$a z0ZqCZU485-m4ZovH8KcVcgpZEkK)$iIEfb+$x4I-Edh*>(1dV0piW^WiSdB^>qK+? zQr+&ba}If+51J+>I)vt~K#Dw1r2&K@MYc?P5%W58`g=Dm!Jrc=v=4+$@DWjxal9Ie zY2iwyM+H9dmSDzn@s)Sbm~{nJ66V}* zgx&nu!kIj5TTSP%dmmmw8#Z8@gA^9dv-iYMS7oUF6N;AzERq~Mgfa6BE=kJ2E|lz$ zFzK5gXd@m^u~f&)Jlyd&kEf{i9y!RMa0X2}0KWcFGm@ak!2q`r#0=uF~&N$My7aJDr zZ152bwV&hXqUQ92om#4oM%gL2uzL#ARRYKBBik{-9vpfXEshf9J?k>uf7?738P*rJ z5s|n9tdgZF4k^La4mSmD3|eK02)@BSRf$p-vUOdPcE;d-xs-QEP9S6b{iZ zsed__MD1Zl>?0}*NJP^3Rf0T|i$Mklp)$hhyOGo>qkso8xIfyR-dzVPJ)Isd%E8#s zxplO?BOHBD4JBv&<|4HOPa>Wl3zYiL1$vVEIBjGu0_Xm8v6RiI#sqg0d$Fd(cCQ)w zhIE6F2S#%`Qno4tF{Dc3X@mx-&L|ph_M1Di1oH8}&FQ>Yn6?qMD6$3;$0qH#= z3In^|`6>nHSC?bC-^E=(7sVJge*$D=a){Ot8Cac+qL*G1#VjEjLER6U3$R??DUU^; z7vQ(2IO8^F9Q8hW0CF{6oR|vT7O_HHi;Q>bnJ#ktlS{CuX#tY;_zYPL5pO96qHavu z_hh;dY>IKlP_F!75`ytkzsZr6A>`N>(;=VC9#2USlF(zr<>tUnqdkUlt(#+T9=0Jz zrvyss-3+vzdIiNukJQs!e}`c%#2fZFDuB^{g51@g3wArWakT4PAum+`3qKQX*3+BD zhYe&I49S>w_!(mlj<4mMpo|F$WnWq$aG#jU!63QXJ1Mv;cM<9^Q^zo0%JFXI4jswY zeYVg$O3SXB;rC_8P?T3&z;k#OHp^ZeXKcNFTIs*dyOm{ua=Ph1s9g?d^9qG>%YaEj z=j-k11?JABh^y;9pJz~UxrM=jjidYO+ngpGqri(M42gddlxPNkio3lGdr1EGW9-yjn6T;SIuE%4Jm z=1ojd%#f8X@vK$nd$yCg-}HBCD=(3DM|*`doI_JkP9#d_wPqdI)a zGt|1R;Kook%L_1}R+B%u<1fANW^ZDDW`E3H%Fw%H^|DC*cn-kOE|8xfKm;BVvcA~% zc*?lV!(wU|d4a07E3B}S5Brpi~g~EPvjOid&k2-vJf<8qlyw9C?tPx z#;tU+ld=F;fA!2LNKjqd9gj)?yO0d?~l6Zk1@nwt>n=m_i z$|n)bra-WKLM-%ussPtbso6C!5D*_o5D<+24=lJEn|uKaO#ky@`43;nPLX%m;6@3% zhQ9z%Jl6%7_rs+kC9{JlDf)yPsWUGMzDt(=C`h7KaFgiios`XA^PI<}|#x8rsPxAK5ZsQblr z^4zNtp4AZM$$8gmt`@d~*l)H(z12C_auId^cnF{!rmQ!$zIAX?z}z;m$s@yL zGz9IxQ%QL*4DS=Zn&a5wh%{LLF5q|r3_`p0X99;Bqf9`Pc7v=&X0F}_fBVG?#1U){ zX=o9NdAAx!3W9sInt#(*$aQoXZFRgf>Bga56Pr;9ER*c{)L_I zJg}r*vG4Skvu?c{#J`E)j+tcfcMMQOnoWk(l9dxr6l*7jGmmhh_LAHKLnm#b#nHU5 z?Wa-&IA%C`je>YE6T3xw)8F9(Qy9w^aWsNPBStysS>uc}uppp<-L%>pH}pUKOO{#nde?{QBX3r%o8xhi zr70pLRArhJSD%rG@igIs66-Xoo<4qZZ&Ur98<)#sEIZYbstoHMXG+K)+Shyh+Pf`L z{g=NMa@@Ney7}#=il0Zz4yJ!$Z|ZOk>#n5n&83uICi&NtHrHSpG;Y5 zopt}R=DQiX75aSdnswQeFPj7!zfAh^hh_iz`Ek3#4hL=B{HWnmNI};3`SAy0=RGQX z`27w;@z$5E3qJ_2ol%-?|Hqf}(Z3g8wbPr*YrhBxH2S;!wzE2S>h_a|8zUClbe^

!(Z=?VzTwQak7t~_TLShk``A&z_GPDjz573I@Rt6K z5s_@r11b39gIE-}7#Jqob4g9Ej~9?Z?DS`3kN_4r2oTIOxqwG%GFyVcXx@^^q(9ia}$ zdJr%v(NY?{G(;%Ln;eqp$XGdfTB42&IGHdqFk}JCO+kbbAZt$O#>j0%%wl5Cmo 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 231/336] [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 240/336] [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 241/336] [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 242/336] [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 243/336] [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. +

+ + + + +
-

Try it out

-
- - +

Try it out

+

First load the CustomProperties object of the mail item.

+ +
+ +
-
- - +
+ +
- - - - +
+ + +
+ -
+ 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 246/336] [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 247/336] [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 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 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 248/336] [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 249/336] [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 zcmZ9zWl$YW8!ZY1hv4q+?k*uf@Zhe&-5n-Ka0zVOVdL)Z5*z{qcXxNcyyu>(uj@~1Nxp+aq^h*tUrdmB#ahY!7 z${iSPsgxZY;B#c4v91>nnK69vWxQ3+I*a5Cilw?cyxzb+)%k_g za)O_pXa#>+h3RTbnM8cb3rtX{n>%R!=`cP(UnsG`dw3$qXJ?guEi`3B@`L_65pqNO zj^Gaeh!%Lek4F@;BN!oy1nMJZ#P*F-ukHg7?~I_|ISB%$k8G$zHvG_|&zf5fcAC+s zyH*n_2h#T9)oE0zYh~w-v{|?&2kC+<^e#~mXSro)Wvg3_54?x?7Za}&YaujT+zR?R zM-6gle;aC^)%kn{oti7@Mv(=IuVeOUo$&6y6zx5x%mYkojx zNyfqo%5-7aQG<*etF7N(N=)kisQ5R(;8vFJd6{Kc2Tmf;pZE?$BhNr85mtu zoWO0x9Up=!&u5GDTVD2swJ5>DG6xvLhUemxiiS>1Hx|twUq7+t4SD0=k=tr?oGR{k zBPb7acFnwQY&jtW>l1n91n&@<{I~%G6zGVjxa$3Yoxpc88dF)@WGMp*i{_LXjv%V^0;Rz)BM(!>iv|$~ zw=SJb46)x2o)}wk4%?~HcA`*$apx^}|CCnoKU*9!<mcqkTtnO5 zp+g6kLP3}=Sh3diL8*zRrOes|y2jKew(+gw`tz*u(=Ot6$a6XWjm^i?0Jx%L+{nmI zp0|UaGjIz-olF_z%(Pt)5D*|P1&q3RL{2Egx2f+eKWHEzd?-LzpUHrAhb1<&!FAeG zp!!7-gEjzyqT&m^PJyu6vA+=EJ`|2j#$sW2>Far0ikKj|f;ROA(f*ms`gLaNDoJU) zP!NyGEWMe57{b3VyR`;IH_P+8M)Kh`?Gs)l*53}%kvlpbAB-C{y={0PlE`v-=vTFt z<^9&fKC7*GmIe^4W61)VD_dZL=fbIO7hJVOe>`Z)uC3Za+FrGLfB*k!zxSQAQhGH!@gFHv?|&1=WY|0A@Ob6eg{{@ z?Yk-tbrnl9HDh6_XWH@kU8R@s$$?+4`T#3(q~GVsTDuKK245hXil@E0S5xaoap3^U zCRR?#gG1?XlrKd-Z^NE_sFw}De|XFOx0$w3%H*JJ!Yb?8e&4WzH|Hp|dvisEC7nuI z%^`;g`K^PwePE~DLOQRF$>R}%EE*0Q61cx~j}z+-WrU*uX~mM(z2IMCw69q9$ERqA zb@sKcKA#s~!~?+1)mQi=Q>+DyW)-D6rEOR^O^6l#;-_jYI~8jNavtF%+{3vWZPWhB&q`$T=^EE)v5lGIR{nZF(LL#_IarArE~TBsk%tNdY^J%B9WYCwGawWr4stDcxz>OvH% z`jG|VH2r7R;uZ^@9WIfiL2sZ;!cB5imLlX53df&!{vWZY<5HKx4N(HfODLdzlE|Pb zAj4pq{cqMW{_R=7Il&Vg1jPIMhw9$n6Ee>$ZFubm49$MSS;p*KHw{4_=oxlNvwi-n zWXFzB2%Ii^$aOY8Ze!42>pIh`=twUu$zk1Ju>voH=Uwk!Z>N*%{;#{F@3*4B+cWG=kJgEhJg2D^4r}^Ro9DO{c98W z@=^&PdVilZe71Ss-3Q*DMkj%Hzc~U@ZAqz{(GxX29e4)Vsq--lHoU z)zc%YBk|#AZq0g=Gd=y@t4D zG^u^erD$zt~^}{|DVX9+KxxR)u2Ytux@o0)G&s zY_Ox|9yaF>@%pyYvT3;l~L1F(#+4XbPJQ<6heftkXFq^Kjh`g|%R9mst|r05GW zu#CBwZAKc71ZsF4k>AaW)Gt@*#{6bnQ35CL?%1~QZK;v{KyOt(gs4_%? zpIv=Vdp)Oa62HlfY9o!c3W-}|tw*;A6~>|jqPo&-m{xq%mO8e5Q<;X^2L@hNJx4#0 z_8z|U5VgPPgjYt*;ddrfcRy~|6iuoQd!bM*NpCJGUXht-h16dwGqI;6sp6%$l?3)T z>mLdE_G!XGAq|^1O>t_Qa4{Egu`zx}i(~obP;Z{a{p$6*lcQvgi0!9F9v|4P(OWfM z!UEFTD~8j*sBB}WcuuV-5on&U%!E`}M9El=6e>zOhgbRPk6z3MSJspaKWUknc~hYs z`&5nik3asRUda$OaogHKToL@$-&@h&NTWPQ%FrJY)q+F}?d%^6*|sD|dvwWmn#XGm zRs+UUZgs^ldsTo5g2SNt(=En3ens7ETA|&>isD;O1|@Qit z)?{oM4QkgL?sar8OGJrzGF;HD*OJpa7%DDwNp&XYMp5q%IQi~CEA$R18rKb4j zLIGVjLCL|EU29IA-RGEXzs1TWeXX@6D!ebs#wg;5H$ZDe9HQ#WW8j#7LOso?W1*`k z>-`ae$Su2cASE>su(m^ApP8D0bNxbHI^$CMscwSgA*{DeIdhP)Pk>HH3rq!suVpxU zf2!*St8aYfHAm69FvF_sgQM18#Dyq~Aj7_#~cY zm(y|1!XXBFl7tA0#6BmGx38q%Tfs7MX<5!uDGDN2SC z%dKnHr_CMmrF8Hom!ztwW2E6a_t-}~I@!nD+0|6(9e~P%Wt&?? z{luX|TZUy0iFjNl3N;a6l*qAErgYD#=Q#YTlgA2ngJtcA4y^0NybHWj*vzeK`kB>{ z^zaeIrraY^M!I2<3z>3b;OofOCHtW9n})BZQpW(Yg{NO$=pd2u*Yf*x`&GsKc7t&2ssN-jpK*Z45<7$TZ!;iJ#_=9mkH&$H{` z7ScFrkN8Eye-zt>7uv#3I6Dcz^QkK}=|jvGh>#`(Q1xy8sk4sOnHV-^nW;b;7L}gu;P`g2JVpd> zF)8(Y;e(V1!*p8l)#O7sL{<@HM!lLsC$ zm|ke_2NcSah6x+kjmOW3EpSo?J6n%3w{GAjmlGs!O6?Ke*S<^iL4>He7LcEz%ZJ>T zitRbhH$`NZNsV~@pTA&}R;BLDlJVn*U`8mo1XuOztvT;O)op#6@w~(}>*F6AVY`ZK zhXMc9Dm$mf;nbm>q!_ zV{LQf@|RH0U1!yiq`0YUmTNiGTkw}{s0x%J6MqlB$ABTIsPlqhyu^Z>P$+%g|JH4o z8N{S}gVS!ZCWmENKXFlj1wWxfA|n087oOG%u@pusw`K*;yuk1q29 zC?V8EYj0tEu(m&B&4mZL?h6c|_oXIbAO9a&Lqn6k7zIlcW_Iv>27XVumW-iq$+BZi z&9r8{JL$; z56mAp0wS_NxmEo{b>NEU9Mb;X8B+NNcZium ztm=9EX`>kGPeUabW39I09&5tt1QYEmKloTToO1blHUDpfmjQjA?p(gx#PF3IadQL- zKK@C?Q)&Xac7~AnnK+(6FTgN?@Fh`Y2IU7gdO4~&EKM`B0e0;v>kK8+~+r%O%7l$0O z2tWA9F`Hpk>w%_g!8Dd~U4ilv5@%db`VYk?MHg&P@5*Dh58BKN#sMKARf$!)Bz{g}0QeQ0t~vOD6FLRo{ZWDs{;mOPQMv6>wW8E> zSBZ5vDP~r^42e5^BZwyUzM);_}26MwPr!2}AYE$2{aN^^36TQNI6tBiAjP#EYmhUif)Li&q zjHWs(mP;lwn&Zb2+tr#v%bW zRuXN`XXYEB_HAjLP6N5TFyAKBvPNRU zf}VF5&q=YQnX-8vnO^9_H(crB(%9M=+%D|-b6GB&dVKGYi_>G9m+7eq#46H`LYrm& zn=3BKX^L`o(0cY2&l6o&u5JpX=6Duvf(5(zu1R z%cWmB(6PF@?o0D3km8v%JSenlbYY(Nqsg9?I)ppDD2y3Km#on|mw3MCYkQEN4FdbA zGJ>ZMeNFkI5RC2N1QeT!puj+r{8Z^$q+b<8(6*%H%xOV?gZVWU`$EzW)xo@w#n}mx z_=cvPDFXHk;bp`hZPfaCx~J6py7jyRHmeHuz}1~p=W1xhW#Ab78d+nXu8H0$b&*~@ z>jlMgKBK_49!ulaXA?{Z<)2W-=ZLtn7Me92Gvs0p^MGvmy8T<%Z} z7g(9EMsf1a5f9Pj#3A=Uqf+N#%0m&Irie#MpmY<3%CrN6t+mUy2npcXXhJ~ zDnK3v9Ez_hzNLqs*UfG-(>?L6kxW=b8=UTBSiL(>?$iXwK|WuV#8_D*O|(74>bJkL z58Gqd)LYZ;$v;EUmBg~1*m_7>P!h-X1OJkt3WS?OY$W_!u7dYU%J9!>COUWMzBTL* zU|K&W6u+y;dI#WxIWa2ioo%A5X^-WfliwI1w5FiycGV*AeeDBM?;Nvi%B_no!IU~cd%ZhJS zUVM2(^~?CNq-^FhSNpqd{^{3Fx^R(4yRX%<_mTYTZAc@#waqeH&L!`Fh-xA^SuspcV=9dwY{<&25~W}zHMs*9Z}TtD5RIWikIC|8L1^HRatj?+H=b82l%K=Jvv zl2{iSYtQV_5Labi&8ksrCj9o#KWpu>4X5UnbzE=3jjw`Rq(Qk(1QGwrO0rSr#;VXK zaNe8sg2U4luN*;-)Z^;Wj#sjLmkGX(R(BA($TVW&ZJ7v#Ib(wW04>oO@GjsU<6F^G z$vbZ-u)?CR>^sH6jBjj0&%@72!L;>sirLb~7f&mmn@aX+w}fy@W9or=?FpG}m#|q@ zJBUWTS_eHhPiH!Dc^kiR=gt1BvAB-16`S%7ScqrMZWM+m+{J zGf-e^v-?+TW!NnV5GTH0J#?p=SN(m2Vhxg3a#Y}HvvaMpG9;sEiPyzWoG|aFWIhI* z@F)>UR|vpMVHO|J(kb&(J6p{NYY$%B#pe%#Y);8H2pX2ctUj=xag{m{jRmL9R|RSw z$rbn?v_|XM^*0dS*8Q^X_MP@P*EjOsiF~j0PThCo4rf^EGCEIC*>})Wf#BK{{e|}w zDPhQx9vC4k@y6odQ+G&}wLmqVtAyhHvikWBM&5Uw+Nq8*%A|1F&{CTpkwUgjqZ(ypi{7rP6tz z);`~Xir*BTgN-9zgx?=0=&ml?&Z!<0LcwBPKmzT$rN^XWEJ9K?O{e=HMRVs*^XqR< zZR{u1FPkYm^;Jk75QM8|_-6s*pv3EjHent#nz-Vdj^JwzN@2qBGw={8KhN+!>NBR? zv{YO+_7B?4)0KoF|Ew8O-MqE0294Hq8Ta0e1(hnwb0cgl_g0qQkt_ zfCtPO7NO6SLkiujT`;4ku@HB4c6L)Vfd_aMXmZQCdyUAyy9>=IF+#Pd_@l*hv>fd| zwUK&9`#T^cOeFJ|8l%{TyW@0G$R|Kmbs5*3xX!(eW>k}^IQ*Tw2ua$>mku-kG=$3C z_-gL3IHeBwLz`)q0pdBj$_ z0Fj&gv{8B5{SHI~ab~^9&z0b3gH9!dj?=1mc+`v1(sJ)iv3!*~rcW;z3M*2(K(4Ha zC2YmbQ#&;#q9%U=x}({}^3Xpa!UrF$Dfu)%&(|^&MxRJM%S^C&5T6jG?-CjSI$H~5 z#xcKVp=*|<(3ck_H>{WL&$*9ukG+G1ziO1dEgl&1THN=V&b&c$sL8Va7QVJyN=Whd zM_nw|=e0w%dGUyop)q1b9E<4sx^wOAcS=rlhJ(T2Vc-t$|w!1S*{>|p>jAO+p#!%7ml zl=d31AvAvZi#K!E`uE;9tpXa`Ri2T#2^P=Ivx3Zt8NokD77AJH?ylaY2>PU=F$u|Y zQ5O zzAK=$*MQHi)`@vB_Ij=SRFTy6$4nyrgQ3K2eA1}=$KCyx75@a(-l-t_Cs6sf zH8!BWeC}*E!&%WL?qGdm9e*nA`8M;rcr=cBmNknb>q7h6 zYdH^aj-Rhhwj#s$n`+~=Yu5}VJ)G;>70G9?OQ22Zk{xB)=?O|B zQCXR&^wf5v^s*0gI&Oo@u)Eyh@J@&-K6Gk|CTpr=G$-8_aXi~JuLYp% z)m_FH-K={8zM9#$K2yu%0{IrP=y4|!(rs5y;(Icc_2$ikV~p}UaYC`}C^T#7o-+G@ zv)YM3#;i(6se@Wmrv7GLrFJD$VOzHPKa#`zULrl{o3yz*+brSAe_J>SSR)z#%Ef_9xX!TSsUo&b0b)JCsQ8Zz zK|LkNi4a}L7oU0%^YzA*lwm$`plwqEYh2@Z`w$2;N)#=DfJ{{scwq;o04wwX${o^Tw1EfG^0%?I*2oa4-3rY~!JW_XMrovN&ZW&KeAPXvs$ zaHqTe>ytOq5#uvjQso#mU+h`azmmBY=$^Q-4WcNC;b$QLfqxKquOp3@=n-$D@m=NZ zou4?9G`CD*+_iG2<#2r~uYl3V*1wOZ&&(y<_pix) z%W5^gju`H$zftT}6E_TS+^Jmc?w%?q`~5hr14&ENNC0S47`Mb~37cji?%glpQ(+iH3(4-FZ~JQxk>>_c>%^~6 z7qIfGm1agep9}P1x0f7Z#Rv%R>*!D##P=*S&$j6sO z;sSezt~E$c4%ZI4Oz;$Okt36pKjrf|G`r=rNqo=-ieog59o2uxLVOm?hOXJYw|Wq} zSHlX@bIg!~LUpSHbXlhUW!}<(Neq|YbXC&e?kGTk$RrizC*7F~8F7JeHh^C%v8?zl6YHv9 zv=b3AOQAb3A+cC0qMnyMIbq9HX3@O!74?2QblNYEG;Q|ksG#XxyJ}mR<~0J5+&b-J zSlXv2fWYWC(nA>2Qtk1LL5K3uIwDDrN#|%IJGK94#!r;KvJsgP_DVXe_zgZl`44dY z4@kBBb~YR81C_cKp8>9Hcx-U^Qc16QAMM;whh%#6{W?_G%Hy{UeR*`$ zhm^=Ee-(rl(3cV?NvqcCe8pPy@-zeZsfv-#i=*>CaP+!--IO6B1ufRV4Z8rmF_v3l$_HfL)1(SkA zAQlRfTq1=#zG15AgFpG-OchupXJ_(ZVG8-wi$7j6=B70WEB?zB=v#Dvf&W+2_Fw|8 zA4kO;kvii1PSvy2+tMO7i)E~)sKA=A_jo7?syc$W3=MV$S|Qi%wW}96_(Rz#IRd1; z3};^!W7EmM+P)ol8pmF4Rm2rVGr9klG;fv_7y8`G-SsRwUg0R?i7dP;X=3i{@TP)o zIj$pf&c@F3lm0oukw9KPzrfkQ{Mu(JhK~t>1OBQn8GbQPmeyQ*&M+>ob=0k+IhxgQ7u^LOi2UJ91)BI@`0py@M0db^MHl@T*i zf^4v}ww*g(?b63A5t?%wcs5l@$Bc?G6@|Y#MFxE%+U5srdiLVVC>XUlKsRRUi|Z6# zF)S9ey)-Tw_t;U*|GdPrvb-lL@q6COuV01ScF1&xN!9dT|JD3?sC}C7^;hDWD(th@ zUY+vl2h-o!NZ(6(yjq`cWpU{(rDHDxE7-H6Aw2%$EtvNr1b}HhH<^-cPXq*F{&BUp%^Ya7C(Scm z^p;ub5iGV$4uBiXaJvP*U4I>X#W!rw@Vt?`e z8gO?9RpmCX$L!j%YIC>{QE_eJk1pst{I7D3r*@6_4#q&vnJYbY#Jg=lpo{9eIBYr1 z5wMz@(ZSc)-PvukIMGH`vTxMePVeJ+p+55aE7u?)mjJG| z${+ve2p{XxH9zo?g3q;RxCca|uNCCOox+MN-xv&Ths_dY$FYIx?Z>Y4e4DJcvci= z5`KZIFN9pztbalQsxEAs${&`u4E3ia71H-jhZu9M~y>ZAw5(@Z_r zzlF@4ssHWbud`ipVI%Kw-`WHs@H7LadMm?2@1s5WPLaCvm7H@@z~Sh9y8cIznW3C| z&+-mniZx@=$826vrDq}bd~KPLfMZQ&B1tVVeGt-l!l(Hr^phf%FLWN_7es`SeQudL z&$%9WM7}l*o0+mJNVer~cX`lQPwpj=KQw0gu`{vRT2V;HbRcJ>DBA(mV%-}q%Ou%k zHOiF%jrMPPk~6xLDum$|C~Z~CB0L78!B`b$%JGdRmXd8K3IfWiaOZ?>j!Q~9cs|MR z6QpW#zZ4@C!tNY{D)cv%_k1pM0>^y$^Zext8jh7&6CsPPOGYJe14(rrjt6{v8`WA4 z)5b9izdq->pYzaK;1&X|#ELgK1x+S*cY{!a7$UO?-4@qaoFZkMdCb>b_t9@0_Md~+>pVJH^T{?VrM0Eru}z+}ORD{qM&&py%6)$I_3O3GIx|YzBQhDTwF!c4 z8Swd7=dabH`$DE>!Zoda)X@*fSVx&~l
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 250/336] [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

+

+ + +

-

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

-
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 = - "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"; - 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* 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 ZVk?2Dm;B3C9FaJgz>XP>&+0#d{|^#Q*Z%+j delta 16401 zcmY+rWmH^EumFg=4DK+%;4VRe!{F`?fnXtcaJ#t6;1Jy10|fWr!65|K;2ubVE#G^4 z&c2-=_s4Wqmv(h^S6BNSeD@rDgAOVZv{7~{#Q>EB=pQ;LOJ>#Q&=S=BxGb*6Db$bg z&PqjE=XdW#W~#fXS(OuBI(0zQ|a; z`K(LEW;IOUzJ=XE4m`QFXV^bL_LmTXsuVTqJg7v}QVzPTrowA{kUzKRFwDE?P?T2^ z*&3#N0_r9Pu1uD_lo(mvp;3$S+MT>!=eTf9_j8ZZG zZ=xyct{3g$_xG1PkR9e80>(%tz3~?a+e_GfFA!{TpFhi;s%Or|gLIK%cRMsCvpdnk z{O76BokMR~!r%k1F1Y$#yqT5s4Z9RP<$hi-K}Bm`YY|*63AAs5EPwp3oFQCwdxxgw z$QO>}XLH1G<5ooJEzdindbWlr`9$3+ zOW^U3%G$8yTSLq21RZ=|I)AcFPA-baE5nTqHi2{RQ*p z${5H~haU@%_qaBW1@qiR;Yr_NHzSEnmjS7A?$kfRpn0m?>;$5Nt@4Aj?jiK#DvVQc#*nc zGHcE&rqq~pRN}AiI5~4=u}mMy8o7bUVC|JNT*{RmVKXNN9|H2V;*~ygiVYSoa32cw0a*B`H(H9gw@MCf1 zA+I5LqO*L!Jyfc6%>EOk4bMxVhbS!m=Ia#aNYw#f>K#rMhDd?+ zw_5KAd6kJHCBtf~hjmlJTCK;h`Z5A-XA_&6~6=(SOKX0KV)V`>{791 zIFqkV|ng|dGZR|^vAtopGn~0US8n-`=pwlC7%g6 z`KNJ6NcuxR^k}tK?+Ei1TviKjpH=7ImN?yG<6ul$>F%s*CIze{zz zaPGKL7GPYz<5<1xJR3Rvab}9)ozXZT@~PQe_aye}qS6SM?{qDCjL8RJnO^U=C}>xe zaT~5b;QrBR_)Uf@Dl_Ty^e~yZIuPk2H$5li7RjxaZ&Nzod0F9E;T&-ktZzmGUytc| z@WyiHB(A-C!`zpoTH^WS3%4iC0%t?l907;;bW&=lAe3xgbq9@#vVXieyUh*2xa zeAzvylqzL_c3EgRCY{KpIuF_(hZzH1Mf^VU$GOO zuXew-pgMKYqxYNU@n!>ZG1WcZA=RnOoU5<0U)7M+sUQxhRH^Q^Bfq{%JC4^MN%?x1 zkr{_A>0B;IK?FuDj_e!xeM8t5$^N>>2Uitt#Umo$``==29*fO7~#U^*xOA!TJaCze?Xusv(gXZDlT~|D8HY( zdVTLMw!}i_A_twc!*F#kZ&wJ!t@6%nc^1ldB25eTZH`4P6mbc@UYrQ}3eF^o52Phq zF=dbuQBCfTmeCj@9_Ve&;oKnbcxx*lMYW{g z-@G`r5tMLQ{$(H^4UJ0g7CrwG)62jd8Rz8SxoAdRXrO#fDK9E$#zMB-GiAcxhTsRl;TUmx20M)bs`Bl^kfRuHRDalvy{?2P$HnI|A9-8qMGMhAA+Z>oEOpS}-$sICuzuld}jX7~FJ8WwbhEV^DG z2@*2F`rX*NlHuZ1=0|wU>fQIPBBkU9eNJ^qIZldIiZ#_R%;g9E_cawNJ^jMLpA|BV z_h?g9Ta|;D{MDrRIIFZd*_DHzMOHW+0SXpoTWj*3^JQNflvWenbe{E*y7Zyh3 zqJD_jQrBuTO*5~ZZK`eRN%^7}h>7}e$=QJjRaoKtfO`Z7=|)bW=$C{ekHCSO1iG_4 z#=ZXL+8CRGB+dXJtoSSj#R3()>boV;AM}DP^E6^Ac1y$4+5ERhUdR|e5d}^$A^0Uq z*uk>$xr`T9@dDwAK!lUp`Hz6XTAh~J4|u|OgyqHI&aAuMI7jdNqv~9pExbZIB2m9! z0?_0!^1QZ{^BpYCeq-Ar%Z3Tj9s1P(9`|jPy`1wNFnn=$7$)H81?$nhiIgcx{7-8~ z+FDklcU==8T~i>v>|5$|E3?ebH<2_hc5cH zV*^FNg=nVF*-C8a0_8Zcd7{tR=hxtb1vMV8ZvQ-Wogm^_id^2OC^G{=vb^Phy%d{_ z;1M)8LHtCt=vU)z`X&|TVW5rG`?yV9#@hFfwdIc2D(`9FF5`|xn`=+(S>VQCcDFfQO-)ES zHLl@`wX~mu;R^OK_3j*m(tS-XA%j2$WJs^IHim)$!e*-ig39lcs z-<#3tRE3lWa#)qe6h1_*TG!YQS=TsidoqNwrd)H~=xA91x9Lp6Jf!%UJ(>DH;pQ%^+%$ksNVSHzd@!$NC;$eXt(* z^Qty`cv*q<xd$aXX za2-p1%H(V>-i#irG^AWT-eG#B{LYXaefhMjB762tK+7+qu&^$m4hBM?Q&;67Qn(|c zSpVd%YJS#EY(Y`a_Ll}F#QFZ!Qc}k@ehn9^{37zcX7s1UA>~x~EAk;SBExf|Z>H27 z7)?!chwifTXz7vmh}w~}gjK z$m%1sb6H5y8I~Uw40$k{x1pg0kZY=ce3NJ&eY8ywsq3B8(knA<9=@|pmF+r3u1DAu z>~%pl=xRzsY}H{wI6@yaB}19KS2S2+NJJ!AMh%y`Wk~@QcwCfrFa`vXF8ox_w~*KgI$B zau1y*pB5>3Yp|_cKrDAQMqWqs_44+6GDl z1VIVRLm==osy}Ud_R4JH#O;t@Q#(V?A@tWxj!QD8I5SKYJT zY-@!8#{8?OI}uhYn4Hq@#TpWIpX^DMe&=s0_*vAdsh%OK*pqJ{enYQG2nz|d5z~&J zi@*uV{JV*uR=t$7{I%FXJcjqB&EnKji~1tg3GjVwyraGqz3%v6su1@AFI}gPo=KPQ zZRO{)&b_R7ZLUS#!_uEo`0g^lf83)fvTh}1bli~MT~^i;qrOZxBerMxR>l=&R2g=S zw`Ab;+}0W3sEBru<(GCCl^jg7f9)Y(pVb#ZW!a?fstA(DRee(|()2fo4&`^op(P>3 z+fu+$Xk>Sjp1mT(mOUzXM#|&ow>;dZ4hNODg{|8&UH51&EL*eM+Ea(A_O0bTyM!Xg|CjP2i3j`ZyGY@EQj40;LiF(<0wUjtXqwZ$Ve6iSqeMC+vF#d zwjd|e#*$e3Z&ziX*JU_q@LDzd=WQcb$aX&eqz%#cXxB7H9c*WqKUMihgLk0Wuf41Q z$Q@Yl@xEp~l`J8_bw~aQ`Yjv-65`zbA=%tW?gbx{MPN9U704ZB*}0)2|ARDN9&waK zzcOtdTRLl1lx>l>z&@1CM9;qWo}pG+5>>~Zqaf*H2bqbsV%FexEDau~R{twXoK++* z+wdItq4KkrALWVho7nY$7RrYx0F;bC-CbqftZErp6-yfcGbW?bBw-MmE(SE*aBdwE z(P%0UgEKm)*7&EK@7Q|hzKgajXSMCOIqQo}pW#`s5sBRr;f{k6@sNm6PNrEyLmmQ+ zG*%=!0l>G6kCNq?I>W-92+rHCO{6}If^WoI@L8{?hmt;1gNWoJ89czD&sZ~A< zKKF2CZCIm3A5>&j?Xds02-}0^k0YRU3c9N!JyuYAcJYILor}&x4Q^mKB}77E03NVq zL8E0vB~Pp2RlVMw)T{IZRcg1QXjWdBp^}nC?=G@FoeC04fsKt?2_5rD$;R2H|3+Qb z*B1Sf0%Ku?f`xUOjK2fsXL{F~jM)eiJ$Y?fm5N-!O=5Imr_kvDh9lZr-DK7SHYa@^ z^A@7|AG`DeQ>`J?J(oJ7iaqqHK%Y4xeZf~^Kq!CB^qa8=n_(O!^;QMF!el>))b zUJfh@U^4yux4hPSqR623xW#f2NwzE1u)s=va8EO8kBRoLVU51&gfbWAPK|C&8AJ6{ zMtnA_;8YiMW1tI2{ZP6`b+}@wTkTP3_rp-A_5-J69-W9=ap^N-TGyk; z$QJH5K?xOnV@H`ltYCy(%DM~)(IN-ao~@OCA$GlSsrBg=XZQDk`pPn-~$iij(b*cpsWqxa9(_N6ezWQM7#H!1=i-5lo~+m;aqJBcOV1r3!=nTe3SnCNtH z{ppE%4GCdbjBF~I4+u>PMjDhGSzhffSr;Qd!Ho*ey+upYW*3+WHwJ{DSAN;ASr0f! zE>*rJH7dj*oPYk8wV-w87a(gmJ5R(QMb%p7bdEVnm*tac(y3wZIrN^ML}@yKIu^hp zLfbr_TOV}5lsan_&`o%yWRnMlzX@|N6Vl|xc!f?zrjbTp}zxc%nMBmgyRkFGJ&q}K>_Xkt8qHQQOabc)QL30_LBeK%|3 zAt6^Y8RG!D@JITH+1oHvqx8nHazR*z>Q4Eas2WU@_eRLJDdeDp>s9%-u``C9r31ex zq^KfS85lzXZ@BZ4=M-ZyD`GvP*!o)swG6cN;a~eggKnQ{eM5+=>`!}U3(#XNj z$3QT=d%ouck6lDXY->tlLNL(q<0VV`D>Vi@CNTOG5(GCNKiWTb$YM9wS4i^Jxb&LayS?km^ zNpUSPcU?p6L=|{`Tbavlp8aC~Rt##|_qf-Z{T*MZAUe8qC*t4ewz>mPE03Wl32N!~ z8#pLTK3&yP^^Bo|mwMZt6vR)6JGxSp-%T|0p;x|mEhx+_O?mj|CxAzGfN}CFK|RJd zGGoj!78Pke-C-1LPvFI?tq^6Eo_wsWIrmBfm$p?wk~{_#$*XTH$M=bPU8bu=z5@K% zs)LtTq#%jL*1~X+zfO#cwu&G5NqV_{3I0kzSUPR5tyJrpP!>TNzZe3>9!3m7O8E_n za6`o3DO7%QC>TKpz)OAakcz)_dZpaXm@NZhxUf2aff!6#EqZwf(a~1inczP#Q-dG{ zHIdw@8D}-t$ICvWTCFLIBdmz-z?OoI8;pHDE|0noW_dKmor0 zs|Vpk_@bi7Y4r6vVNsFkS9=m})FJKj-5OZ~-P)k4Xd0@9>t_h19p>OHwlJ~QVOb+c!buP?R%ijrE@Vh5S^$3K9V4@7wNEG%gvQ1o1&+hVsBqR9?yC&$ z4Y$HlyLA^ytDu5`K|j$E#-1Yl>%d|7z+Q4T_HPVguelUkB9K8I8)tj)*bJCC4i%n? zLWM{$=38h54W&kMKryqkmoOx`fuj<_O&E>(@alAD=VjiaKQbg-2C}1Ayos_~VVMKb zc{myN+QkY&u*LIC@m|#{mv?TdlymJ4quWh@ko8C_3}G-jZv@ehF*@=m1_}cZz@5R*Ef7K{CCTfvRW{G{5txcy;AZTF(9VbJuFa_ebW?2MiF-Y*LX8^cp&Y9U4 zVLR;Z;pD=zkedHI2ecEWY)?-il>`PeSxHH%c^m4B1tSH!NbAcL#6;ELqBh~hqeJLa zq(da}t#@NaE^vQ5K*ULh0d80^<4=b4F+S_mtMmXMD5xAI;uvG!nD7J*3iQW|UAHd5C(~E~&>8jnX874o6BD~g&mSzn10=NfOag*`z zWYZStn2Fw`?n8b==XJ(}apuEw6QyKx%(g$|%SkI>A?Kg+z%uaFXcton#1i4huKM|x z9V$s-h_NN}^v6L1hU;C-J?vF;nRy_KfXbMf$zsW5e+b521MT5(n}}P>&IYS#%Z<3a zFq5X1g7iLg8WE7j4}^e6_i$h^XRlj?0f%>zq~kt#Ww4y_*RxI-JT9J!nD~iq$-8YypGBTJCI)-tj*Xqm)c;a?>47ZK7eU7NYm+`5 zU@7*N#N;I)N8pEEu~&~c^pkbtSlX%@RUf};#rWeTGv*CxEa1LEa~)@>%pCeJE{Qre zo&mOk!@I#p1Mx$<&`R&F&RzPZ*_`weYv!0CL_@nK8tlFQc5XD<5(t>do(D`@Rat5d zu1?R?!$wC=o-_%aPL2K03JC}Q^vZtsu~o;s57W>bd?1l?L90a+X*k8H zcUz$M{liq3Nz_Z&n-HT{JwGy$B)11;d70-W#sAXbw~u&E;fovs21s~FJ{@f{zZh=J z*mo_^dTTg?_^ol7%C&}m9C+F`mMRQ6p@);}}-g>a+Ut>a27Trd&=w-p4S z?ramw`Gfo@BUR3skLGBCF+CJn*p#@pY8#!jB|a&Pp9Ndi??~`5CRqpc{P`Fn5tABd z=V@i4hid~_!or;9l4r1GsIpaC1yfD*wOq*!G;C(KBG#d0ruu%hT81; zvTX%VL|WW1xg97L+5a$B+B=52_D_g1kO(p194xKp^d%_uPC85kGd4 z=Tt3~1j~94wj~d9IIQygkeX!OEa(Q|r#hd&C7)8#-JO^*+?~jkdWbo1?9GM}BsG5E zp^YX=SvX8+49*o$1c3*)gu@SsMnA|QrdvhM_x5N$( z+wN~X@RY9yxG5M@uGSr+&W}+c*Wt?I2`$Oabj-w{>&0$wMeWnhy8#gl~`QhPHIrMg6#ui zckbTIHd#1pHU&5~lfE89$Hm}D@VgYD;}J-~1#W?3Jy7Sy&uR=&f!OE>Qc3Xr8s}d? zTJ2-|Z}rQNL*6=Ur%u}_Yek<7pjR?76C+Ejt;6Fb1Fd8Ged$F(6@+|(BLQKjhPU`SBwBRFhyFS$n5>>qvBP~1eV8huF6WAap7Son@| za@6J@fNQJ@+^kX=?Skzm0Ydq3^Rb=n9Y(UkMgueZtehpAbFHv#PF2XHFJZdfZmAM| z+bwRRdLTow^BMUp$tVgR87RsU(emk2rq1v8OQDi?MOU}uwTkp(B0bdH$Ude*W1|E* zY8^)BDw^k*bVKB^Ta(Nu13DkK_D+zKdv=7|01D`G`Vf>D79t4~bLGOJwa(U=DHh^x zA&)|wEncCH&=)_cJ^qVGj%I_1D0Q*tsG&2Jx$mkuGpGP=|FX#$P^Mfa_xm}r7JFSY zm#Yyo`eBq@&{fZXXP6z3yWA?}YsJ#r@nlfo}wQs7+zwjcFXTG34I49g^nZd(foYMc?TkB-TDD|3C_|p zLZ5GkNVVb=k;RS)RM=1kB}d6rvfH*WsVJd1-}Lq;E&3j!Aa&?6v{n<^vPtG-5y4i( zJXoXfSMM{755ptjRSn{|DN)>LF0?aXIx4SPAysh08w~P~4=W7zCY?b-M{G~LFLh9$ zV|G^pdTCg?GMu3H)@85+}EEyl` zQaM#^f_YG2CwRXU-_Gtz>#kb)Y?voID`JJehx=41FU zoJSQwxj6VQ@hkk6em82_;SfVDDO^(~b zA6MMyjr+uap&BiEI)PX`f~G#L=2uxQU&2f$jKH@3$@her9QWLc3ZV?Wb$SVzcndv) zVJ_7rQOxWC-2;;{;oEoGi`9K>Uvs7D*qMAcNVr``i)QSyqYy0IO1MBb5R9R85w0*D zgSli3Oxf*zy0VlIkxIcBMzqljS^|dldCng8IjlmUs+?VWIE1>JDbo@Y9eL$=_@8eE zhpp|l6VWPr9|=11$(r!0v+li>7=8*8U5X=Z61Y-KD8er*S>@_k`<^;+n-`YBfj-u_ zhx?al9d2yRDcoP8nkWt1`%WTSmotlGl$t-4+O`$Nd0cvYiRL+s1D}ETpqC+J1sDKF zzaRm!kG9NQ&L*X5OHbxM{TQ3r|8`p@7H!h8?VL%@`Fn3AS2V*I=w;eRIIGgfdhtpr{xOW+4G>Hvy|-Hd3UB z>rl|Y9UsMF27PWM8+7xI4RY21evn}rwmg6+D@BDC@^)ybrcz3wh+)~oczX&doJUeR zL*jRvA6gqFrnM5ZCY%yl#(Y6UhW}Af*^&b*d|QYBNcN%fru^HHKbT&p_W`k)4GD5g zoYkYrymqZ(h@>s|C26$f9qEr&ewWf!{0pK}2ptZ-C;sdiQ6c;LBpEUkgtlBBP!u3l zdF#&BdMOFMfL7kx$kcJ+@_-VjQ7{h(LKPkP#|fU48m;8@se~Awi}2d` z9W8u@&di|XyB$14spOPDJdYg6gNVTnc)GBY`j!@y;artOW`3uDgv=6f^cp5g$fcH0 zDL}E~DoJ2f20>b6Go_yU^ty^q0i01`9t?+iaKv;;Vq#{wng)LR%2=?&{24V~PSd@) zM->&A#eO(c)RgGEJL94c=-f7FgHeYi!6^1R`4ZJbxg)_Era~8+4i$B~Ktq&R3A*;| zAorHdn+SLwjg&u+h74HuAJ`{DuCSKu z`t;6a%-sd8M+Siy&E2P_AMBO=XnwO)40$&LX8djEIa=#7zMM?H)CeU(sDwF=twR~l zPwGt+6jiWJxF#9nva{@9pv$+}Phsjc(Cp@1in|hDJ{JA$DyJNper9S3E>}`9`vEo+3<)a@Q|Aq8*mV23P#>Su%H64kUFtm>DOSFunMK+NVo zGU>cA7AICR{TkBhWs7zOiX_!oe>(T&pCwq1l)fn9$j2dkrh(EXORQzw8VX@NNWb^7 z6a`-mie=cCsVk8pTTUobpVJ1sM!O5lFh-;Pa8b5*0K!b!_qP$8vC-k!I?^ivD7kdW z(raAkX;-f=*urxWSg4|O__gh=U<+V$1Q{R9a@Lq8apk&GrC*`p22`hmOYrv0?JgZe zM&F#3tYSs#sG@3RQkQ0&$6b)3tyYAY-!M3-(PE&%1t^+mrMO%i zsbfK4pu%5zwTCCV4&zk%Trf%vG=!A*<50jCcS8R3PhqVXWb0Mh8-^qwiz~^`UXq$Q zp7O#nAb64`wwcHCfa8WpB$L;gBSt3JO7rzdEUw~ocf3laOZX$auQYm68Gk-Ci&i>% zhygw$x4?kVW#msocv#+4dJIB4NJ;Sy^R@nZS;c(*x|m;ef{|%wB?Y#cvzc%MkymNk z7tIWmAzNAzl(&(6!cB@V>5(E;=D};bEmEn zNMqe->19EzU$4^&XT_yx6m0OkuA@3IeUu9-Nxby1UavbGUyYBSN?BR)Fr0l#l4d>? zV?&}R@wr&k1~dn_tYq+;kj4lZJFI{I$vR{{H9DkU_K)tahhGqfrR7vvi34lcKaCy| zt<~odGVwimK1vA2G9J(nF3K@&BYR*4{p&8GgTAIJk|R#X%eptLsxc-OOrT}FlChx2 zj1fl3R)var6wpH=<|S>VV*o-6C1{CP&A{15e;xOHtv^V?HRbqp~cY_(AV)SD}yVLDbOtKoi)uc6u+MIVcs z!(5VAcR0;a0bO%ghTL~|Ye1v@#B@t6wf_8$v6s)~)aEWIV!5ad6gb*cM zdm9FAHsC~6#8NaU=y=wQ^5 zdWanTxVE!&yFsQ!Pcdn+sZ>rG%JjHw{&~DhUf$}@wNc7oOTWG}Er-G=p;@(ub}>ZwWu5-u2zP$;vrZqHb_92wsGQ%7A74%PCR(=xUzSDBDB zrNm#@amU@5%?Qyw!cpVg_mP^e1TojebBQYuZfBT;O*79m_uUX*mAc-g=0o1aFjdAf z&xl9o@}f*Ky$At8Ka-lq&{fFs``N(p-vIl4Q9|}fLG{V&~7`}N_`iv$3U4st>v9Tc3*DNsUhpFjB-YuqL zz-fl>H;2*WT3O}HYebzf&YgU<2&p11)5MSAG%t@2G_SA4AJ6JH1OEbW&HQ3~Xc(0x z%c?PmaBzs2DXy{vz>wam)2;w0fNKT-{i!>|pJ>5WjP;--!gL@(PDThQg^V)}#7b!y zwhur1MV2^Bbgr1?IA%v?QYJ^*+I)}8>?ISz%!{7Wi9uixawFBY5 zkJ-{&mC2F)KsimHP$@}mF`V6tIMC>Od~ZSjmzu&zTW+e~qA*CX+RK=hsE$m7Dw)hF zgf^?1pLF30-}Y&TT8)CC<#ZBzORnj}PNt`%GcFy^>AOOZKb2OptgG+#LqQ$%vuup0 zcDA_AK`x;jfEs@q&N9ORYN0g{L;tI(U&p=#EyrWUN~h}ExgP#`IjTJa7)Zg*smnvS`^z#p>K1N8pr*8Kx3S=p1^<7B@vsv?fL z$<)dgb7uV{_ZCr{wPSt7oc{i@H~m{s&_q|MHyg5z0L2KwF5KD&wD-8JLBJVjLnJ3i ztp2OdGBKJ_@YJp=T0)#m;x8s*Am*Tvsew%6`By{#Ozvf`=Uezdu9UaAIG2IbIC}qz zD|*S&<$=J7Lp_(B?Fq``A$3RjH(wg}7yDSRba~v(ab^DjLN|rK-e{(s%m_$kY?8RA+aw~bfNuK&~0J&2TT3#1rP9XGyeSvWo}%H=Iw{mNvFo7A_i%7 zRV!}jmlT;M!MKIuhpWax!_rRP%LDR{mUwGz+u>Z3L-)=zx#mgA)rhc^ zMrY(@40ZDGp5Z$G^(5P;=~mmk#?Au{o^2ZrRn|G*yz&{j()GLa*AOxPsqq?r zK&dBx^HwAo5L(6H&+`6P_b%uz^?^5c#JL%QQ@tvLZu_YVjpSyPy`~AWK52XMP&3ZB z*37o~#x)i49Bwsc%O=xKu*C2*Qc0AIG%tbaO83@=?rpExgv9@JCE--sA|xzf!@&(n z!NC#2rGRaTQ#cjzkiE{Prdm^=io$q8xx?B?Zfw`MDDG7>D@XM3B?MYXa zx;jR4CDr7^(X>QPp2P961jU;xRf*^Q`IKwL34~kv=3b?9WWcYUFH9n#aQyTGll>@` zs5)JQj*W}Iusv$D`?*_w>3Hx64<8(6{ymcoy6C{k>S$b9Pw>K;+ZV`ILTcN^M&lpL zt1HroiCC(bq)c?^AGn!EKrf=3;!8V+BWlo7ME4Ov_R!kkDT^di>ZOTM zo+Gqf&#;PD5!>$+XOLFh3E)cN7Jrw*qe%_~arYC<>eBVH-TqOG`ZRVj4y(STl#G){ ztgq(i=;vubYyJFV$W6Q0eIk0{F!oBznr8}u?jqCUC5DzMPIxWZ*p+xrZL+r4(aLFq zFZT423S4AG=;ZB!BwC68p@Qe?c=>0bd!$jK4Br;xnQ1M9U+YrR80JT}_wtLv!y+DE$bKTrRlw zgl-Jh_anMpwYW;+<-@V(*$d$)*4~B)z5U5rxwFtlO?~zYC45wxY9TdWo^;bI?jw0C zDNUlBKH4JPIA_?u?;9{2+4<-1BTCyNa_p#Ad1cCZc#;Z*e=|HBw>S(cZU_lBx|nPu zNU3q=kdRZs7EkWJO8(UxTtK{xc z>FE@l0j5w`BWP1QjOp}8omWl|sbrMAFmg<2PM1%7)3E~1wXfbs*hhzeV7mUXj5Q|8 zKYInT9)yiQ-x|lQqDK?$y1-xHa&cMqnb%UhU*}YL@|$3*6w%PnnWpy!HX$XsP_n6E zu;=gH`B}E5z5cVqA#$&fk_ua+_oc7BU+af#$cfaCn21PS{`!`WGwtB7i-_TFo<|ue z;)yo9KdW@a$bc`T8VY2yL6SQDa84ui7dTI6(ynEl)bqF8t^?sR!Pp_AH)|oDJ7kd` zdcTm8L01q7JKZkQSk26V$=BWhj>wi2NwFOB2n4x_(||W~NvBp#2GU3}6^tx+cb-IA zIvD+y{ekXuHESpLcI4`Qe#xBm#Akbwji}sL2#k-kLCJo|s%xAIh-0f^Z*6Se`=kv@ zitRM}xwN{V#OH38>zuA>lfU57Is$7#x1_fn_!Daf&T+FdVqjT7&u-pL9#L$stZ%y3 zXObl$3tY_BGQP=r4zWXW%|W-cFt)dv*=%w187`Wh`HQvr`!eRCAC(2&ncLIMGW>Z8 zKuX&pw0?i+TRLYyL_N2Wo_D|FBf}7UNM~u}?)Xffv)(4eGZo+RO|1Yw?k|aLTguwi zbXXtrSQhp=fd~Y6Xu)Yl5cdj2C|Xz+DxkqtPY~TX#T)uG=G+n~5m``kl6iPD#-EL% z%p3Y1*5{>g=%s_+JBO?U&Elrgz9^a!OJI-qIqkYXz;>-=kuikCCpr@qfW&nkV;ybt z<&=1XZ+P5AG+~C|*a%nu%X$9J?FQi`+%$VDuuW5mOr8o1#6(96OjwYyXpV6s_|*=k zP;)-j;cypsMaM^a^klN#@C3$fV>|-d6tj-@ zn`(pzp_6_=3*nug;|8sR9BKy*QuH>QKA4v|7@kO#5@Vt+F^@wMA^5Mwk#E{AA@j7R zj8-WmQ2s3tKr`)DA$6qzIdk~~ogBbHUdf6gm%N7DVObyPeHNbyoU&^hStT{A5t0^4 zc_`zrJ8&A`T{O|V^swqt_1Ah@O&ELT;JNyNjJrtYz#}&ojQyS;UN%Zm<5q)a=Ol2h zU2K?t#m)%3!3^1z{jJ5<-7s}`*S9>QXCiY4A&^f3EfE1*QH0~^$9{!P5@y3qiSC9_(U3oCrnZn(zy@4mAV=w80w{74>sV`^4L z5=orw?3WOm^U>h0Z*&ZV(TkSWg4d9VMfLp9{dv}={p%*<8O8POW$%y`{x|Bk#wqBk z<*6$2Lwp6(0e?ke%>TDL*~;7y<$v4h`>lij-!^4=8)Nv!lwuo3#{Vyghl6`f7XHsq zTow+_+kxwoyN`o)3Xd%j#s5E{_&<Qt%Hc7PcA)L { 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 252/336] [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 zcmY+rWl$YYus(ba4#6e3LvRi5ZV7OZLvV-S?zUKP3-0djZh-{1;O-8A;KBd=?tQCn zz58KnYo~jpr|0SE>FKsi zo}KdpW%RbPWF zt7u%66!d2ZNG&5-4-9(7&~;C<`8F&;kQNTcLK~`ni-tgr!mdrUD)EM`d@Af1W9!D~ zTpIg#3V<1uDB03WMp`pkCRok~F36sTxqvC#6|ZU!iONErX3GBEd?Su_k}q5}mGJ_% z*FXgVMYiVft|LfVJ4yP)b{yW5@y8#s4sEv0i_KU?&B|fy(uvPdW}MDFVo&hYfZW3v zU_(UE^G+Nf3yP)W56Sf|cJeT$?NqM6RMK201_*dw3DG1i(VDQu|B8g~XSZruh^*Ac zug4Zud@sHiXG|)?wxqQ*OaCZ;MR4!1i};{K(Qf{`4!cpqP@9!=zr?8OzD(GG4U z;S@^INL)K7jfg!uiP@H>8!;n*z@6pys9>A#%~L@*~#P zAaDTPF7CFa^TICt(r&T?!EnSr6vwQrO<Yoc#~jSk4fhF<|`>C2e$b*FBt9dKCfv*sxA$(@}US>Jfg3D*1j=G0AssiEnU zxMeE2nC)Vd*U-J~czTF}#fx}(AL<_lDl_Ry=gLmb;z&YFBvim7xgkok~#^ZO_!-K)*`{A zJck>0V~+!-#{(N7ss)n0_^auf#4}a*_Mn6d4crD+l#ehdX*tfQWgkHxe*Xk(R0=@P zewiINwZu~`)GZ&hZ2r^(Sq6HfMl`nK#a@S7d4KK$AQe4sEp#4Es^F@|~CT-S2 ze3A&Rxo=V1d*Q~ZO z-4y)}!^Wxo-R68-DbX#cVD?>*ypR%uRzTgT5&XaT++lKGCB8T>1iN&=#88M6n@ur+ z`4t06!3{GC7S4CqlLwu2FZz~#7HTZiEK6&TYbpsI$fM|5J@ud;;KLpC2wB%>*kE}u z0D(ZSumAH(%(9O8!{-#-!rA)Hfn23L<@cI@iPD@1(GJ4?!eXjj)StDCeEqSgSlp|P zt|G{>X+*4H{K&t1AhzfAe`FAJ^8!*}*3E48vb+}!#^>-4HfD4c z&nLofzC2wP40H;@ZlI*;SA&Ri_WhNanmc!5zDA^_VBE!U?$_5cPxOpS{Mk6AzE(^f zjd659=4&-RCsB{$``4dmO+X-JL3%vi05k*E)YGfh)U7wcF#q_RWHM-Z_O4(VttE&CQ4|X9&l!;efjR z-(TFn$0atz`#LWz9>^RV{^Lnqnq-`eY9rC@49fV{9TbtKS`h9BN1|Kjj?O4UI+hyq zKfnDwyB_KZwM%4s`(e7BvBa(-Ge9{^r5^#{l;=U8s`P@a1hYcxM~fY!g1fsKwSNVm?XBh3C844cz3j?hJ(ge!jjdtYB zgSlvy$vM??+n8E1lY(b5>Zq?oc|xG{xgY7*V-IAqND~jaOma2R;U*Dr88F?xK?;C< zvQ`Lbzy0hFtiXnsbn8PaMH02(RouT-K??T0KhigPiAgB=PHOl`b@wBwm%^zf?2576 zU~}*1KAz*vo&-_D4K7;T{Xl9r#=;r;9Nq@3 zXvSyhhI-)K@vAkp(@4YrQ#8Lr zWYa8d%M+luyiSY00*roXs6&^P`$9yi2T~11Gf1aRd7VIC>Cl~g)hG8sLv^Npji;ii z^tY#D9^z=@d2AzUH@BUfx`g`t2x&dCfEr}$69rw97@5HP9I*NC!q=o)sT|*Nk{#A` z$v@dHHR^oC(%^~R%>oskrMryx*90~od-YW8S$()7UDUH<2HqVYftfZ}?keCulkzz4 z?$T{Nk+>{QRBqRDFCX?gTin@NJVxJctll0y%%12eikzpi74+}3+WwxmFv;VPwa@@> zbQ>+lUZE4GbKlSE`k@Qh45xJ(SvUSDKR{~I{;^Q6Tneo-+sTV2Cbsrd2k;E!?`zj^m;{y!u4=Rs)aPvK9pf%D=EwLSFc5a<+{ujx{~{r0Sf_tH zdMsfPI`7%9Z44qOxF(M`Twdx>t^>S zU{?Rc*3zkJ^RctaZn3I`bW3wo&fFRvy289}zlih{$8ihNv)8fLA>%}0C~X^VmTHB* zO^|(u_~A2xRiPhw?x=ki+EaB-rw|cC7p+7w@V3TGI!q3QHCVZTe^HY!neE?BY&Yuy zm+b{4@{_->4dBgMZuQ#Fp2NCyS^h7pI-yZNkv>&png99vHHwvYXGSUA^xhVJ4Bg>1 zf&G;)k=QuzGq%wuc%PFNVVOPce|Fmg=PWH6O%9!kZ%wbB&ah$0Kzm!rhy`{5e7O$f zlR9OutlSet`!p`^43Em(+l-jMRVm+B7f_BH9o9H?O$TiOrRU-!o{J7Yr$K%JVA| zVJ#aj!QZ>C8}#?;r(bpVCSXP}+qO zoT2+pUN=l?&YphOnHWCNwdrpNZAsk1ZgaMFK%ntSc;Pddyxzy3Wk=ea>mwpjvuy;6&~vRP2)UO`>RV`%bQB)i!;;D;*VF5n2d6GK;d{4Rq=e zk?GSE(TbvM>*OpCJDW45x!Vj^76~!^BptCJIGAncy*Ilv+4R79&7Ht%#WRG2==tZ| zb7?gDMEH+cR*})iQF1JO#a4{+47#{=DqT}}gS_NFtHz@M&%!RRt%&FSmy`23~|;(W|BGf!4!l4W;@g!`4g z5H+SNS?aC7?~OjbDR;4Iw%O&QOGS~seYMQ6-mU7pHbS^yF^3& zHmw|X$mg~U{P=!{#LKv;!%I1L^>?MZqDV=3o!s<_vYQ2`^ue^hdmM?^>)e^zd#U5r zk`)*YPOMSAYU0_Wru6o-GX1te&1?zpj+EO~sg&Na2XX2q?&5MUOEIS|Z?`cp3#RG1 zlaKGJ)KBlID7@jpJm~oS$vMT#GMYy8R^d&i#t{Depk+t7F$Qca-@%)sqGNwlJ0y1&)L}k z+zZwg15@i&Oa#k{%p8NYWF}|I9D{osM}n`E<}k_`zZvW3^zb@M|F@1)M3lGjq5}Km zShsb7-e;+!>siX)EvMOgqg-Z79fjU$qo1seU&5wh@m8;i0TeRq@M(Y1Zu%revwLOU-`eo`Ucm9YY#poZq zO@USiYafq@%xxkFu6nK#toyN00v$N0jBVBMtCDOa$C^;-bM=;#{-=gl2P$jf(Qt5i%qqoo6vfqGo^^ZWl2xL)Kf3N~$27iNq?nPga;^?B!{voyn}07k@~>i1_- z8gJj*Q2*{fH^-)dS8RPs#j-isiznGizRRQWq*`n^qIE5_Y13;p3eoT@*I|&vz%vJ2 zZ&F?EqbS}U#h&$v?)1mq%vf(5vxTmCq<}QCXDRu%vjxEy2cCc@rC;BSHe5dqs}-(R zf@jN{|Ap0NT1vZbv`$la0Oz1fgOI&$-&{WQ_Jc;TPayRhnguedLJO~`S}F-~Aw$GZ z=vBJK6V&5_IS(Dq!P=?~`}V;iiWqW(L-I%x;+Td&Mfpk#{7QeQMKAcKGlmsbpxpLQQC zIR27mdh#r`1dD=ZEc{DBFLtgSA@RW~LNBNWGDPI#s-Z0{9F$c3s8ukGTZ=Hs%zfnr z-g9&Jhp`yd-}3s)65_F}?bXhkly@jQz@xSpKqRTgjhPKJ8t(Nlp5clGq9QQ3p~)q`4+;nh7iT+^a&8IkbmBjnc!GGzG6?Mo*F z@vHB2G$fe}MUSqB^`D3hp^~Pp_u@K9d8jZN-p>!X(py7TP!)eE{2@~t`jZ^CVy7ph zNUKcVEQuSS_Fem6vWE47D}(3RS&HKCKMRXTa#uwAlyiN(UF#5ZYZmG?SDPJv?u;rI z43wqOsz(s?9C|)Obubw1`gh$|SO8|c>UR}x2-*1-uRKe+(;uaBvjbOqe$;drnTgNg7uMM%9i zgh=q-M$!&Hw5nXK)RX8kp#2C2;I+qxRKfd|*$R_=ql7`csb@e5tzty6%FYMPqUVd1 zYQW^;c9O*g@_#I}6sFI~da~SIMTtq&*y}NG8v-bN+iU7F$Uk8QGg>JZV>kPWs#bTX z1Uvzv*d|G@=}gqGNn8>zMm3MN&-O)F5_ruedDtt#3i|M;R}y+Ez1yqZKYuwEo1*(4VZpBB1u4jX!RUi+c+#TE~Vy_e^#3M9z=?viz?la3$65c#j+S%rWq8W|3 z_w!>}ig}W;i}sDS;`5S%R<$g_t;P(8z8Sy~BCfPJ1NEw$O771L86(N1<|z_<3Bf$c zZyj`EEcVq#2aa2tF;E@<0%Je3=0ePQu7yHx7`I&xep z_`24psc2zieTi%2w?ol zumZ_8teU&~{6-wy)Y)cca7H{rGAwi*ok#k6Ejd~ul0P|qamRUoXsH3&%9CxF6lPcj z@**eQ%WWnB?Q~^nD)@|>Ze0dxI!Cs0ok7YoW%s-pCxJKnu8u;I4`Nou`Porb$Ny3N z$~!P(4HI5W99L$*6uy zXH1{&oM^)srMm80b&vEUPqhLXr?EqO^z@N%SA`1|%-GjO?m8b(SUARk%r(@Tu7AhN>4i+TGkH%U+G#w79ue*#VpMq8h?R*>(Vq~nk71OkGB7&`bi(km~pVp zAql2TWXtkeYWKLY1J+_`u9kk*n<J3}SP_9bMY06k^N`G*C zbQ!WMy}gGkHFNa-<~gP=gUmZUmKPPDUz<0OkI5J+f;J~9n>dkEQdPkc=b6Qyd+Z4n zH)aZSe+p?|Q7=;wWDHg)P-bdxu|{s1dFG#@bY6-%=v(I26o1Teop!YHS3SXm_x+q8mUOwhqrzUny_Ox2e~bxV6hQP1wqFJE z4ig?8D!S+zj2X?vJ#A!!{B52RWkmX!w_)f<2giG%=4n&Qm6kqnsYA(B zh%lK&*wl{0`}|M8jEfvlvA{vppc<=gX{!8wsoJP`1^=;wWf;D#vFVUt7R66V+-{f* z#%X9!ss9kUiui6zDj_b`n_P4E(wRL3R?$ey{YGz9p1rF*r0{z{C(N8Kz(>W?2MK90 z(4PdLM-RjPY(*Jt<@>5(wGxYHN}nY!eM3oMIGQp($+9cvD3<7|`c7qb_6fCH{UM1ke)_Yx({uE}8a z$dZtedu7R+CoK32f7?4=1J$c~*Q!n6mfUfHF|ogSSd(F2be%Dzc|@K9l%LxiKdYRs zqyxnbp+E8~D54#|=a!Pcqk4XWc!{nKy@^R=$Vg9nFfI+O#c34gbXA^u#ztkzx^HN{ zBRZs>hFB6oatn))Ch~jSB3@ZxU8bu}5OjhdDp{2YS$hvz|d2E3&-8D2!;3 zRy4?;G8!rAP#2;PV&Z&U`~qK$zdr_K&fxN5EZQ!pRZ^TysT&UCr~ouG9}8D&mm0Ga zc8m&%&3}K^jy6O+^@V2r^37OVvdvmVW#HevS(6*VfNZv;E4*kPT)p)I#8-lzk^3($ z{boXAJoqBYKzsu|cs@{=J(?Bpdn-x^bFghqQUR_2(7j>if7RG+%LfN&yT zK&F_BrfU$Lgt(f3w5NqZezJ)4iuycOvb^YjP=@W7QA9CuA^&70r_X=5eqBtB?dQ)N z+x06|R9$PxIa1LrKZdGDG_7Fa&==!IvBq*9cyz~z5{i_OW1ROGMY)FHGCIBYEaj(1 zNe>EquXvV)(K)T1YYL{DlRMAXDrGFR;6Rht#zYAOspA9!o1%mxEaLaH@L1R3@o%MI4>dNF}hi>u{(z8;eG#!Bc$IyiY%7`X@rph>BZx# z9kL`MFEZ4(-?}6$u6Y3Nm=F_A%o0;BtUy4yQSAiBwJG>nIRxua-dt>tk@?_`ixnx4 zEg-^a(AFIQ;lhEP(lCQzq446vG*QTp_Uw7(jkmg(5~lTszN?7ho>Xw+;*oaWvM?$G zL8#c;f%yU~l#QYKyJBZS?0pnJaN)Puq3~cNN;q+qPf)nwreI9lMklg%any8*DTGUE zHe?tB{zLvO8OFgRa#ei)=ZjlD%n?N*QVb%5qz52ihkIDJ_o82JuQhvtX3)Cdxk=OY zT);)uSx(Lr2A2;#P3||i>ofFB?Lj35eA<&o_MqC3sVnDbN)%7>wqV5hjRGm?=~jUt zSLGlO9dAX$Of_w=Q;g&`4bGc{;+!khJuyDyW;(Rk74wd>fXipFCDH~c2@{YZm~cZ} zfCOeD&e{BVAZV;kJ0v|hPQrKc0#%_`apCvY7I5a7o8C3Cyy!5X|v?N{gTvJ~VF272I&Qowrl{idcHv zM~>9N4t)n1ptCfqU(=>4iR&H-=>}e5SO2m@5e+YQq|e|GNh>8l2G{=>^*#A$X7P-8 z>7+c2iQ+XVXP>r2orNJ^pnIqFs$$P$cq&vB(xvkvri{z9J6WI@u8~WN21{V&Q+Y(b z-Dyd#fPi5r-pAbGeQ*KMAXHUO;%%I~-g2+<0YSzUCzbm!d7(_DYyH%fY-q?u6bdLL zB=j?_Tk82f!+vXv_YU91sxa`?D?2#A4VWcR&6=53nN z_xH<^oz=InFv?bYD5`QpZ%y3cm<8ct4sG2#vLWt@>A8S{_1~A3xvy#dDu-HfeB0IM zx%S01oZ-8tS_@_Qs11pkT$pILs~q7N<|mP0aV~JvKnd@&dD|NS^dEJ}&i)=B7>!DS z4>Ko-J2({;an%F=aT-7^EzA_vu!0E5sbrdycr$o3aK8m1X3Gl15~F<$p{EZhqW< zlz7SMXYdoBumBK{n3LMWb_K;{oUlrfr?gCmoBr4y>rWpR_yKcI@^utcoXYe|_7ed&ouu@cn-Z_n|vqUbV8V$n4fyq0HCapo=+fKpd!si+)9lSwC9rvse_EH~gUEw5a(!wU zlf1bCVb!@|x?(@Ti8X}=V#ezJGHH(%!-;9bZgB|=Lef78(@Pq-es?dziiJW1{yU~X zy6PGTVZD^u`tWD_?J@@J3+x5XRz<%C^QG;ef`bI@S4{cZ z8wl*FNZxG8s66RGGq05X0-QRtKq zqHc$jMiiRH z^_vBtm{ld^T6Eu5zDlXu-!8NG5rvp1qKfp9I(*aP`|0V6_-1w4){|NfQ!h{B3EM`> z&8Yf~d}a6<5IRflPd8T$j>Rv3V z8hiDqu#v8V&=M;&)(r6(gg($95%Iy?)r$i_v%ptq(Xiz5I7Ni240iqmaw?H}gGLy3 zs4w)eT{4U=a1#{`dE|Y<0BA8Yj z@^HOXPL-FfdKYs0DuB;%q~b2Upw41NTZ4iyOvtr{Q2(mhh2G{mr#vc zLEfaLEcGSYC#ovKaaP!fd@zHka6902JWpW)f@XBOo2=;Dk-ou@zN_5ahtXMdS1f52 zG5^hblZVNj@TyyJ9xe)htGP{iN@xa}Z-*yFIS(#ot{1seqiYNFAahbwuPZnmJ~PIL zD?>U=0bPEHMob0Q5M!B5)VX1*kXmjDf;;=P8Y2<*`MxLTaFkhu@c?`LzvSqixX_ur=2P=U4$59b(I$SkhEGEeBYxOhb()q2X= z{CAORar;#2xhk*+1R!`7ka~w?aH9>j#hZLV>LS%UD}6EL$aD84<&yMyFp1cVFimo< zDxrjD7#+!DXm2Mkzd(R$&?Seaz?^k8GZ)gb7%EI5CyhmdSZ&BMIMeOADOVIjrKM%o7BoxirTEp>$4BBkZ zhiM24Bd%=qXFS-{@{M0cLM;gsS&mP{C;Zum~N< z(eX7Hs)aAQGpuMdCM%wm#FVXMsD7e7o@f6+SwvBlCKhl|R!Ab@>1F|`D?!Oe#u)?J(yu9Cj zzFFfx8p!f}7F>y*<1Zgu4=#EKkPtDZoh(y;XlwTJHy6%7ZvK<@?=Gwub$u@EIP650 z0<|3YVb;=?f9Y!*dxH-3?rzoiiYirqG=}OyhuxMg?BfIGI^?dc_%l z?O6#6|Bb}MxxpSCR;VOTJx&6K4So$Rh)jJ}a)qK5#)vPBBvjmzELdE8u1;%#NJ8BK z8gLY1L~Z%OGq*}yT!4#&ASTdByvII+I4CgPmNJoE*Hxum93)aE?r&=VnBU+UZc&uN zBf$t2-*Cuc@ezKAXKE*gU-X@)rw6Qku#|jJY8(hQJM+IRe$HJ}g>E(pQ_-x&N3o)u zQhjfX3^qcXW8Rf6?MLook3$|N#wnF1l~7={l)lr3W$3aXNc?nMSE=T=x2y&){rNQ83t7C5>bEW?aBA< zCl9YHeN2?WeQ_=?()~kLneb@Xt)<#=n2O5#M46TZSGsf_>_b-ia60B!u!J(j<~iIs zyVNsga9*LO*EN(CC2K_QiiFMhwn?nh>v;DV?XEIK&LN3Q!M()XXrQh*P{95ZN!-qC zo-smjq!E78aq9iG>=>YJ`N}0a`(7f`0jk#qW%%r$Pw&y5GAL%~gbDwQg$rLhM}{v^ z>5#;GgdW+8($sj%5U+XzPvP7SpdT|n5YqYAE4T$=1k-3v$HBeJr$BP>gSh`z{((0Z z+k2kpDUrj~(>M{2yA*#>xAnnV&WQyRrN~q3-D<+F8swW~9uJUfITe(yNG*l;ML5xJ z(tnInN}?@4Ie@?D3u7OMK~_F7!1U9J;D8S{e{V8M`_7a3xZU`~3;WN5fbtKaC(3iT zrKpi%*cWIL+~IvB@kR`X)vsQ)aZf3187(4&2QzT!AM$}?%@e9MDdUp>O@!* zub^qcXY7Oay7Z*NSY3nI{>9*WR%6+U>Sz2$FfO3E0J#}i{^Hg}I{a5ytCo{p9r62MdF z>vUf)Rd~^Abz72~0J8Ss(vc44o~S7Pl)^`EJu60U9&+oD`{wqNf5l>;@0tI@!wRLV zFOZg71kCh*cZvBIM#90cCuABiD>J_HM1`a8Ej9o3cE-Z{=_II%zwnRh)S4K5(tq{D z3m^P(ugZ#o70)UCNBhgD-zE20zFJy}C-(qqR78xl=07ji`=RMotVpPIhGI6ja0>&6 z2Q||%RZ@Z#el0q%UOpPe_RHhm&27i>IN0V8kVB4On<=Pc6Ao?EMQJBSGD{>vlB2RB zLC17|$Jcu3UdS`KT3*#Og<{z@))6&=RtJ|jAfXn1zZygbEulq6U{_)2@OmTr z69|>kLup^3=OQf&fJEUMZ}@3+IE&4zb>HyW%sQ5m?S_mDfd@SC4BpVw9~$T%iO&M~ zBqJu}U5*Lq0p$yXFA2r4(8rhGZxH}>C%NCW_Nj8W`ot273i$W=2en4c)``?r$^sj| zrUhz*Lg94Y%*r;{RBu+E)~ijd(8YTxM#L}BvPQAEiwI;$x7^;HS=WdbPd9KqT;HBYup0GPxUyYzQh$diDCBNXEeg%j6a=My zVQdTvDTSyo6Rueg5$nMUIs|J!xmm{iFsg_Er-l;HTctfAl7!w1AdSw_UvY*OYNE9B z&IchyPCA?3alf|6xn00jIrp3#8<=j7FQg3|a4GGNQL-clo`rz1qx8q^yn(_BVP>Dd zv(DlujRsX4T*2b|i8eKMPoY8|GiNc>Jp%hi zP4j8vvhG60vieoxm?z`C*CDrSSCetyS)hJy(J$*w$Kls}pa1Sfhz8|6i(dL9y(T_f zZ9MDq>c5P-3&L6Xwj{)k1Hr|TL!c3rz479cUA#M?<=*c*6~-V-(L-2&?D4A|*;K8I zrX&gG_zycXR5r|#xVT9aD7_nnL!U&Zww0L--e!%GbtYaGhFg@o08`Z{P2Nnp0QBY- zmKGIaYz@&JYro4Qh?D}WR5fE_o1}&Q)Fhy72#lyB;Z4`56o&Z)XmX*%8C1HI{Bh!= z8Q{bSuVYszsJ#&G-+i(=n$;5z@h@j4LibfFv97$f_3$T9HA}-P+JbD;AE=?L-NY~t zRecsvpek?jK`pBvD{P0^3929XmC|%CWHUD^J8d42&C$q))|^~k8+SsO=X*rynoJ0Z zRCd{=AEF#MQC>3xXpn0T&xCRXRFLWh^zir0InYX<7@9?^oUAH!JHe)33;{Aon@kw@ zt1wRajqe~y{MV(a7Jgbx$2@v^J@sV=tGd7J{Fhy$7X>F5=b8{;~7_{2)H{ zZ9A{f;Ue@od*xiG1(^{ck5{zVod%W$R6smOGiLlKBOfM3T`@SY z%ArD*=toU9hb!ISa#l=uOm!`;2EY93W`AB3N07QRodC@OX97v2Qks801^vqC9G%d2 zY|E6Ix0yn(>8FwF;1UhWkj!Txe&}Yf(2mQ`rD40b`F-VKEX?dr_73%3uoamF(+FLE z&`zAq=;wNXMZhd@e}oEVDwG8Wp05eX7VMOv_@G|+`ORKk(vE$0Vi94v^vt!wMs8;m zBa!ok&j+bD2w>R1oixgP5&?wbLlMQ;ri}~hDZB`b%#!zBlA)=Jw4mXL3Jt#Y|05px{!ZZuhnnme3Q=dixszi!~?MTJ_A29Jz`K!)(t zC7AF2u;1-ek~?JYDyhR-I){{a0ag-% zfRJ{{7prU-)`t2uOfGYG8AW8+Kmj~wVItEgJux!cR?%KDGb#RR+ z+Mz(Eu>GqZSaJ?-dKr`sGxR(z+QSA5ta`$?1IcmK_^`-*D{xT*TtIq( zF}*B5%@$`uaAZwil7XY&CHF;OMXfkmbT)*=9Ac^*k~STuI*M9KLpz9a?80-8QQm{j zWRCGJ^V{>e)w`+q9jZXivr|kK8tL~A%_263yo~iVl8G29~R#q(cuDDM;7a_!ZO zf-fih-s>!+7Fws-z{h6&nYV9e%T;w%m~`8Sa~kQiPFejt6&y&B+8N4uXY(zHU20Cu zjFuaN^1Vv@7RRZKs9E#EkBiT_KzYmgdk2F(KZAMfbOB%LHJjtSnpAr(Rda7rk}>59 z5*IjbK|ZNE(A?1|WkeIx_f>8a#TyoA_)?avjv^jG>n4bzQ&DcJ39%Y84F-yn8iGU{ z_!fjZ{?35S1O6KRxhYviTEVo_zAsI5t$Arre(dpXVqaz1N0VyKa{eS0PzPP$&`!cx zg;2P#JIFnnBB*-}ecfX!f9wwBdrx2J;^h=(^1T_k(|%KPed(!NF#_FuFLvOOY+Jvi zSD~qDFn}{*ARGYnUSgmW3$QPc7wy(bu{OD9mkKQoB3yXjNlDt{?) z{;hR%gw=0lz%)%*C4tiqo zx}kwgV=zgJn+_sSE{RR~QQrUX>0POh(5j&Mo{UQ(&%zIJ_pTdr$!+pBh1a1B_(Z;c zS~gh)E+TsLU<+I$4j7u3U5hT2DD&extfxb(nv2i<1 zYd#b`jxlsJj~wU5B4_tUcdch;M;H%yB#;TzH&-~MCQWv*SL3;IusYOscdLI>8W}nA=DFjI zJ$|ne<@lPYARcIqzg+tKsiFCE!Y0h?n5!Nt;Z_{Y%C_k9#oY$*dUd~&)ARiBzZnz% zlQ!|WK}2}$9o&TN`EmlfJO}*B$+%)of|NWzP;xGkm0jA-ZU$u&&GF0HFbDXBE%o$M z+IX5CeA=OZjwbPYUe`QV+HnYUT5^=XOmG9jg4U5q+Hd>AVioRd<|w@b^q0obhUPj( zwv{ARyQ<0V*XyIf23P&L61s0ov*`QJN0S>l**3?=qQu-6ilR@~J4e4fb@VbjBEu&d zp5z5462+F_QGtJXx7yle~EP zI2Y@JL%?9fjZ|>h=ywJe_Qu!!EW&la#T&iLalVaZBlN#$FyVwm9af*3I zUrvMlN3L<$k4hksBw5u^Q$4dTe+(t!Du;s5g*?)mVA+xDN08~ zA^klG%@2gN`^nqK{sF&O;TY2OpBe=Cl2$GHG9s|VUcORbkhZW=|aPw<5 zB6_1ZVc;tmeyT#tw}ZFf?~$iFb}ZypY#)EnMX#Y7p?d&QBr^L1qI{SMk$M7J{z<)s z%ue+0rTS1g(BUWPbqysHXx|Oc3hMlo=QX%#2uDB6RhBlbnPU6!DnU_(!iXEyfOClYzUfs5>q!t*q3?{ z*fYh&Md$-Cyu|Tr({6gajThTFXp$n7#=yt{g$xOKC7ZxSVt>-C%N&$p`I(=L-}%D8 z<6aiu^8mX{=XQ7t^vI@Z9IU3r&o>TG-3p_F#!^d-(zdV}Rgwa!lxlZtLY>>R(Tz;H z!yaQDORG=%&aoOQ+MTErG^oNx+hcwz{D?0=osRmlS7?g5fZKKH=w#0?WH)9hSe+?_ z!_h?`3J?v1)}C+IH3?VE@3{Dq1m2m?**yyB`#D-4&)++ctoFZru8Vz8v{kx& zn8WVwdf{S<-|PF(8t}haah*EUU^vtjH>-vnT?Q}^#E$!IL-7ft@Eo$t@e4sS-&~oM z1FPVos@a_wX&A~dC)@jA`BiJ@VyC@8f@=`2Z`@K~{{({fZ z;Lyiprr}X-@d$LoDXNZc1*v|isx7SrGz%U73le$459zqJRkj2JGB$bJ9~{v4e!5mM z+3A%5yscZ?8TOzV_Rb%8nyhVmt*{T{a#FH|xYYGaNA-wu0eQhFiQK7haIc;$hah=rV; zuY?cLp3A@?OU59%UUI{u-gKS{Dfvr^9JOeauUAS!>hG}e0^|!g0;inUm{a`!$u~4L z&_ekC@?-nVRN=@_K%fK>6rzOCub3qNmxc%i5ximH|2-HlQ0>@W8lK=2>7!3q+69<8C|Bv(S%kWbI#aA&H9jyeMFSKtBF~YcN zC$MNTB&>eL{9icx`}I8xf=)uW=KBOP3q}}h{R9OICX)Z=UkMBXS;2rnSpUBoxeXG& 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 253/336] [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 254/336] [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 zcmZ8l2Qb`S*WX=b)vOx5B&)98V)YfG6J_<@qKhEH5`QJK2!bVQ5WOX8^e%`f(M5}v zh~A=w;Pbrm&iBms-MMq;%(=gFW=@%V&pF-h&7PHLC_%>9iRpWsDU=83yhRwMQOcqF zUSHDCZCc()5ZOs${e+e|DKEL#C!@2(E_}L2yX^Pc*_mo;nCxf=dZYRy% zpFBMoO*`&|b}RCraSAX8ygrnT-TAO3LrX0o&91x&r}zFy#qiK!%CKb$O3|ZP7#eII zS;#V4x()ZDHOTl-C1xrCI^fWFcZ$bTUCQ5NHmzS(L^Z!F@)1Mu8U}24-B;1fkrpwG z(&{(*aKwO;fsS!s*-v+#SrVO((+83D`_L?s;JV>_KY_$#;L{{MMG^Fw81JBU*w7~rvdB{2juO4CaIj4&-5w{Xtt;|a-|KX?Y2lz63+l*4(a7hkHz zUTTqt)JDQsQp4S}4x5EC8a6KHJ7!5bai;jurocHdzhfx=@>+$D^m|33TaMR29g1jv z*m~=jgny;q{%r|Bq#%zIC#TvIt(DV=+!<1`!}>PW;=Iy0O6ti<+WkXQc@@5JZ22B+ zmW9S8K;zyPx77qs*hp?FU#YClJinZIbnV9QRH&C_eDXAGZ??WTHE&WOQaYuXe&$<5 zNhJWxlYfCGY(cuD@6eR~V!!C^X#(}8`l}GlNDkT^wO9bU(go@^f!}E$A+~9&oOQ(H z+^?jv#%$!-=%oN%#xYCECU7y069IA2BWmxK5*SAEPO zW?kZps%5OUrosh#Gz0g9P;7`$gG9AouX)WP2&czFQzJkk1|g}yP2IU5 z27!nbajs+tKslKE85Js@R^UNdE!K76=M0kDMj}pZj^n&ani$zDf4$f^ z^Ls12xYbEFeV~v%fsG2r$ffz+o#b$5%T@eN*1cL@7Xc=o&y?bgZRcmUZ7G}TkHIn6 z7bcHma`_Q+dc~WPM~h=+J-Ll5!8yXxlpy zpLJD>0fTj#Lw+s%pZC;}Z@HFtylW#@gOb(;=0@$R)Kn!UaXjYp0(+jl;|f1qt-LcU z-+wXCrFEbjG73-*D{E{9V|=&!%l6%Rj_&j$wRS`pJOOs>6}2Ow=Tvo8!3dgNzcA^Bcwj*wY{Zm)6Q z9&m^y`+JOEFT@}uEa&@nsbFRWaX2on(aq0F{g`~V{9Lf|ZSQ^H$V#p(&qkA(V5d#y zwHN@%>eQ&m#Y?_GdT}dXuq}72o4gOtkyDJ9)Q$NgB{FN3*&CeoOFjMDJXGHc6Bkxj z6oY;B+bX7xjvM)=9uD=41Hd5A^)=|9BPnCYlUb7Nfi>qo-bC8oLWju6;Ow4l1K~NJ zfF0apu}$C1KfoXB{-{V&=}@ai7~pHP`sr`DlwJ9D{1?->CMwWpviaUf$E& z#edWlzaH@x7V$2V?)F4?Bsm-3g*|Cp!Lk0{gd1LFOM}Wq))qFFwpDgSDm6jL<+?9x zOS0bzF@;4hHkog}llRASLa-jRY?vjk8Xtg^Tp=jOzwwCkUi;_w0GHd(bEd0`+M*Tc z^}|7k^Z3n-U`;t@g^XJNUmf+tbqnuSSTJ7ISNyck)o7ppu98R7+z3Fu|03G#)M5#W z*TZYPb}JlNZ&^P=?$;JKqWSycF}HLnvFN=Lv(0zX8TqeZ;`?h#J@H3N4&GdE9Gptm z=i-iMqDx_qsbj5yo(i%OTku;)pr+BTDL&A<@pZmlMmc@bou@oGR{gi6o8APw9C;yT zp_vGVBN=nYdiUn-S*Msh*cNmgpehenD299FJSn^WK#r!$h9q z=O8FDfM#Y^HW|npnou5w^3swOB8-=}uX_oR^6t7{wq~B{8?3r_am;k1C!Q=r1$_js z1j&umG@Z9^aFAbUVmQ&KAr;>v>jRjTNuAbyP=KWH$@~X7Y%xhj+XL0I*^f6 znQEW&W#kh(@OnH#R2JzBdOVJnlyeHC(G5HCKk+tCon=pHw40*mQuXV>O_+Lc=>Sxf zZfpY;KIC885X+hw6IEcPCU56o^^xW0ev+3&>p#Kw*(5@J4fYHD z5)DljBx8KK+*o~ly5!#zj^UIk*>jI&Z8YF0LAB_3RVo-WE5dZ}&6*nF^`zbflp)de zU~+ED9?HQIIEbZ16K_%-D!JTB?hX9Pk@}kaz8%VKZ&zYm4L8;aWs=ME-H5=~7&iX1 zJwvN1ToeaF6Wlc}{BaPAud!L$_56W&7;T<#kqY=9Ha;txW==i{nT9t$-<7S-C0=p4 zL`JFGkp7<;MiN+O-BVmMpozO&m>oU0HY)ik^KrWXQQ8K!6bHT<$hIfXM;K zG~b-+Qm^r)hoAIJgAKJAc}vc)634Lo+5V?R?PXaHoB>>+4 zev(?TdL&)K6v`D;C!nbsHCky>5*oD&dG{NH9T_f$oe413^qdo>SfE>H!GAv+0WZqV z;cQ?tuS>+Ypg~cbv96d; zE@M2$3<9te%YSJ3sBpA{!~kp~P%YWLY-%JXIL=`#6SaD@b5SEcqka_#tvUJOi`3$V zcXPut2l2%oB`rH7&4izL5u23UHFueGm}XBDDkrpd5(pRv2}VbJA_>+>G4>IJyr05- zwEnD3aH?Y4a!%-5-JoSPDOjtXM1!4f`>qiVjsnPtb**~~z_D(fq{2S$H%T8YZChHn zH9Z({qlkyo41bz-n_yX2c@h;qb}O&J)cVa8HlW?8aVBWn*L1FIugBpQ zRe$OD!jXJ)H8;CWa_d)m|Huo(Nq%nCOMl(SyHf`vOg*x61!WYmV|vIgZq-r6A&yXk z@l1MMZ#>bRJ88D{0@SliD(ieSZUNuQfYG`qGEc)8jc$9VN8h!1(V7pehnXrq7EamM zBQN|I`={MOk?0#?YiQ}go8|yR7U98~7vP<*fBp~VN zoQFj$^}7OxHPeMG!BL?p7&CC_MKSlxqn|8_jV-esu$v_Qs?mp?k|x@4Fy7Ab^B?r- zi(m_ZK6dRZs%Y`IAjJr;I}a|HMbu_LU|_;)@KBJM@6IqIH0kFQn`DG7`%N$^2m~(m z9(IXqjc@u#7CI``rd_P$3VFdiTv;5Ul31_`M#%3?U!CgQ;-U-PsuZ
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 255/336] [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 zcmZ9QbyU>N*T8pSVd)T%26ZWyTDlv7rKGzgq(eZYzl6AefWVT1fOJWBhqQD_Ns4qy z2?9T!_x#Rz-uIm|=l*fez4y$_y)*MUx6!rPr9uaal{Rs1_yuhUr2|Y|(-7nVnKgGo zf7LsQutSuKnKZs=3F$h{O6qY5cj8%CtIFz}wI6;=@H90mb|I}iZoORekQ(K_Dz2$B zsg<4K>9Xaj^8PenGPO%})6`reXI=YoT7=zZ*sA6iXH!bRje8r~;WyLIUW}loXwA>B z$wbuCC|WG{Q=PmCKPCb?6q9Z`js?!-wm!ygWhE1j%XY;m$OJ?m$?w3Z+-o0DKewLI zZJB|R^r++q2O5Xx(~lSL!Q3dc)52s)_w@!;(o8yNo`zpq$0yHyG0b z@6{8sm>>5-M5?Vsmf7$v1oVZJoeb+x8Pa+q`lak=^akY4-R>2B$UJVhvh6$o=r7qw^XL0dV->M z@8FcDQiDvpp2s^S!7*{rm`{am)qztMLOb%e3hQ$LH*+uV9I0P(_tH;JUxXaa*B7Sb zOiP7}CO1>feGeAJL;ww%O{fN~R|$iApz-_sRho}L>_>#0Uva;IroM=v znaFxiR3f$YoRgd+#$J4ff2Uu-($0%|QRbjW=Ziio>JkfTtW)Q*kEndfEV*0X=JG3{ zJ!RD1eR~Rty6vM2GV0=|Q7n03h{!u69}+~w0w>cUwHjJbR1kNAK$TaoarH7<3QAGU zjmL+9SB{=}e2ohN;mV+$2#}a#>Z<4lf)b!ToJm+)YiRINiKr=^dngloGN_7gyXsaZ zg^iG0+(WE`Qs-}5LiTYgMSDm5o31LpZ*?leUM(E`he+X1EUWwOHR0?237bO;Kg-rO4eWRhRGn}dPOm2kfF zimT#NuPktCCQ*`Op+bkX-zN5f4-i+cM#jVny%lz2mA__O?btH-5}G9;6Dy<<^+$wf z-YmU0Fyj~UiuuCs5(kk;iP&P)FlQ0gFtt8pnpUHkhbqaCq(ef zocRcID)n%wgJ??LoOPKR=o0gHck2lKcPxO-6qZT-PJ^^Mnpb*m#S{=Cti zZkpc=CH`zQw>wx|1nVJ@`W0;DEOiV)!C&*;AT(@uhabeH9vYTIo2}SU;%k?JPh;d% z+SxVTI)F9iSfRlWGP`rgdhyiGuCfvvUq~vM!=x1(e@Wa=etLZx7}LABGu!4A)U#OK zw2codF(-WJi&f}bYQfHSZ;ye$w0zQ2g{IAfO3%h}G;h9m@CgsY$cdvvmeoQrTmQ|~ zc#A2_SGsXvyULA7@3QexX-{t#$7xsWR@f)vu+Qm~52w1r2^rb1t?*;=&a@7v95K^d z8WgTGc2Ut3t>R;VNJ^ZX{as(iuF!xPda_|Gw0{_oHCtKG7AZxg6$*l1#qOj9sz}gDrPX-<>Zr%9Tl&04@9S1|%Rv#K zL=o`2Qc{Qf-T~_V7v5&66pdB563bEzV*(W(bG`PPGrhoFj-6Tr4~=&*NjLo`ErR79THK+K|UFXZA;HiTbGtCB+7 zfnEA}m9$ft2?ekI%jDsuGJJG$9mO4@;1+zkF+UMDwcHTr%bfK&K2kG9I|sCrxR-m| zN06KSRZ>Vt>lMUf2S<7|&?|T_5}L?GK=XRFvFhw%#k(iemszan&?%as5zuBTl5SCV ztB}&ClOa}z7&SG*>haz4NP{Bl!Gx@)J*3}?U?BPy70hWQRA{x8(EV4I$Y|o1b||Zr zWs!arOkX{iRwCVVI}D;cqW@=ajzSSp5ChV|dZM4daU2a%-YM=1c*Y+>k%K5u0RN+g zFfgiQ<>C=2yF=J-UjXVin1!VRX~mAiT7Twf@Q6G6cC{*rC4|i!vu^n?+>Wjdauijf zk+-%!xp8fgMFv{hVEENUH!8`uko#s8vdq$OZ4B4TfwHcn*0F%ED3jEPEM791`V~I= zB7^%=Wvlf3J&WjHYPrGGWiF(9TI3zcd`6y?c1_Y0w3G537%YakFl%WYldJ4Jm2Qpy zq%+?wRX}hnMuLQowW$kl!}Y9?U$D0}+cTtJ7g}iNjvLaz{~P0<5*_N(o8hVC*U{o3 zR&ijE)^BeNxsN(n{B=SD*~83Hqyjoq_R7E!p zP)I;gNF_S91x<47VZE=Ih&_h-0v zE6y{Ku&vIB2P&=c^o^G4v=Y3ost4uK^`9eWNd=x za?F(d_A`_fgL9e`k|^-TUnLkixWow9^FO;!gW3(|)||O?=#FJKA&MX|&yin;;;th9 zHdtr=-LNk6HYXOGyK}YM==eS}sh(L?#cq=;&%bIK2I{KOJT1CJ37iqQDaIXy#BX&Pn>^M_Uj)$&;VQ0L6_?DD)T?#Cfje{2%>e8;uL90NlZf)dy zvQO0LK1Bd;&%}`MdH>4q22})LR*OF5!vXMl>HeNzfIy5mAQ0jGr|Ip)?cwR;WaGi* z?d-IuyL?aLB!TxN-gzP>Fc!;9s=liQ7|4%aHXxvg4#)hWX-6U4psO!gs*a!}Eg3De`~gzBvWC8uX4 z4Rz2?J>y;u3>;lnZ%1bVSnf!@>co|-zG^43C_49H-AlQhL4?uN2omqX)oqH>AjJX6 zOWr$L66Ekr*@-(RyThN4_%6hp4;6Sbmz)v=JvoCM$fE3GK3X`*PNi7I&Rns@Y&4G7 za_wWSJTOfXxBalKK9Df>Hww}ZjLP9XSwj)KyME(~Q}|jT@#bf@y@`X3W5VvIDqN!A zLbQcf`6*>$BdpL3V2|D{w|kCdfT21eJS$6U{n<0i#8FeH>Yz6SuT5~#l)Y$UZ7fyJ z)~;k}8BJI7Mq$m{(xjN90 zDZ`s@S|?BhT3UHdN#2fk1lNEky}zh|%f~hS3p{LSLj9zlg{AvONbpvMN)^aCOFaG>T@U4hg&bvIj0@wihCM$ zDmRgxA9$v${JxT4zf|wq*me!r@N+f}hh)yyAE@ETWU!ZvjV2O{996^BQjP_Kn z^6Ig)%ij?~P1bQj(VHsVG@P45HiBnzz;OU#*c>sm@PU{=0P%4egQaa7y+2SsQU@Ux zq`#>n3_6d!=BK-M&FQ$PQjt1Ruo69HSs&^j%6?=LqxgH5?LGElj_rtlCPe1q%xxnl z^=CY8Sxl{{o}C?0*ptq4A!Mu-bN`>AjN5;Bo`_uOTG9y<1hOOmfyhDVEP;o>TYVLm z1q8_wCNJmD!PJY!QY)Iex82o&bRRhbz+N&-vdLGFe}7k zWBXqFu+{}u}pIS+>|f(x#`RN@eVv~umxw8Q1_~#9v{~vlfGEQ`sx04 zHUAv))(={JzTqjX$_nddg{6Ok@V!h}wN97|J$J)3D0*USKW#nxD4x3%+uWAZXA;B} z8TJ(~P(4}SgA3!!47%35Uk&R*;YG_8wr5p?s@XJG4KjfoHQV+>ITQ>;5a4Q<_vV44 z9Xs(69$$9wU#{$#nm9H+8*?Oyg^`bZopqd|-%@xL5ju0+Av_AkJNL|g`V(X14hlHTy{i2A&gz&KXAX^po* z$B_(ep!4Dbr32%KNtj9HUrP2+VfKaU``IS6`|IPt*jxB{Zg%B6Z;kLLGsk1JJ>ryk zB_z=kn!;VIisLfFOu^cd=~No-n7sRsQ(x3`lFid9Y_XF&`g{jU#_L{*y$+$#d+7c# z@`=UU)?8pK#8Ac+k$j{{m|q+Hr`=ix=R0<5aPjf5sU;ySW=@7M;f^Ck=dfAc- z{0tSGK&eQ)i*znE({M-esy)jKSonfhRI$&lSgKyPPp)=Z_(q6vGmgZEBUv4Kak8Bt!==oB9NHLkyUW;R$<{N^2hfdr`7T!1y5JWICrndu@)3~F` zeW)2xoNa6Uy(};9ZytSNj6qOWhrWXH7H<=LU&NN(wHgYwo*K66_Zp2Q`^fpi-6j;HR+bgNBPH|y* z*`9J;giO0r#oqQ6f^JD}NBA_<%Emc6+4xt@i4n%RlL7zQk{&J90(Rg?%8VVG0B6su zclE^eLp)|Cmio`N?F*+lRlCPsxkYE=0z|9I#(c+`$E;63ApStn(ophheda-Q1ysuIdE>V^JX zBQ9A6nlDZo^)-bhnrvFm0*#m=9P1ro4@OiS2mn{XUZM$9`#JL~v~HD$ao*oC)~9dz zsdE|D$+|4S?__M+!=G^*$RrW33uT+nna%)`!t`UPq<=4_w&sdZhdv@9IB((Ye;-nj(UfF1PCrO z)NdMB2vfBXs%evZ(7_A7Vt^!WRvvWSYA?xnO_21a@uxsJRwi08-A zyL`y>_6K3ZB{8d;oMf|4!4p}qSO#>}_Y0s-1$Y(WWBIyyKR4N)M0^s#=QR)YQ`ZqN znhJ*7DRDi~E6C!VJbX9)?8{tqAoV23jo_##@HBKJ(AriG!O>OD1(Hk0G$DgHOicx8 ze8e?)663aY?$pmZ7Z}Iwz!FI4%m0U!&AO!@9uveiiD!}Gp<#gsc8SDz5eY$UVE}`^ z+b`eCHQT0DUEoYOPFK9F7}UnYGZO;Agr#J_6D+@K)E_&iG?0k1wF{V@419e0r}WBB zeVowzih;3l(<;T5z=lqT!xr=lCnQ^*fS;-0G5obIzE_WsILh;j&uO1qu2&rOb$8}r z<+l>Q9fnT?2oOPd^BK8vMKG@tjR@uIX0SF-B`YoT%BGxx1d_c16>L2m!A}J+X_-a1C$p z|L10i!(m_u(?PRZwG}%n7%*4qMv(U`W3|f-_@%L2JKBk9%%L$mBi4*n59%DyNleuX z^+L||^PNYW7a3^tkya){Ivvu#L6ts5+Va^{SXs}WdbFyI@A^`YXj;(E##83KBd71o ze&*$e4v&nO=%{|mj^KjQddJtP>O7qn(dUW!@;!J>@Puf;N6nu64baAKZ1U=OxIW09 z?s+9fAM+bJp^l23h^@B?*@}98+BKl32=XjxvG+*%qs-Z0&GVfwJ!)aygP6q3ZSpt$ zN!et67oD4}m1Vny47EJ|fg#KK&$;&tUzDYp;z}Dn!K%I<- + // 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 256/336] [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 257/336] [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 258/336] [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 259/336] [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 262/336] [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 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 // 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 263/336] [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 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 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 264/336] [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 265/336] [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 266/336] 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 267/336] 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 268/336] 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 269/336] 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 270/336] 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 271/336] [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 272/336] 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 273/336] [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 274/336] [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 276/336] 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 277/336] [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 278/336] [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 279/336] 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 280/336] [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 281/336] [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: + "iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAIAAABt+uBvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxEAAAsRAX9kX5EAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTM0A1t6AAAF3klEQVR4Xt2aMcolRRSFdQUuwSW4AAMzU8ENzAIMDA1NzHUBgqmZkbG4ADGVQRgGZBBElAERRPg9eC+PQ73qc6u66lZ3v48bzH+7uqr6VN/T1f3mjafT8Pr7b37+8G3En99+5akTcAqB/n7+48uP3vvp3TdvgT//+uE7P3woBwv07+s/Xn32jKXhwKF/Xr3wpgdxpEC/ffnp8/ffKkQpAg3QDDr6Ocs5RiCzm0ILEQca02qB7u2mPQ4xpnUCabtBWDWFdbfYmBYJ1HLZN6PBP3794uOiAcdKY0oXKLQbFE71jkBS33FrjClRoNBuXjx7J/QUNNCdZBtTikAtdtO1+JBA34Z5xjRfIG03I/YBTYVMScY0U6DQbsbXGdevF2C6Mc0RKLQbHEUbbz0MZNKPuYnGNCpQaDdY0iQTDR9zU4xpSCB9t+PQ719/7k3T0P49bkw7BQrtZnBajTS+uIwYU7dA4ZzynrhMWF/3sc+YOgQK7WaiNQpCh9bRu36tAmm7wT2MovOmaUAaPY3G6DKmWCBtNzaYN80EJjIuDUejMSmBUC/abnCrL3Di8IEwErhAvUGrCxRa4C+ffLDAicMVmhW42K2VLgUK67zlFXwcqL9GmltseUXlDirOvMXIbqKdHc/vieGTIJoE6rL93djNWwy9OHwqRCyQqM+J6LpeFj4bIhZoTWVdWCCLBbvkY93HwqdCdJg0AheQ/XRf9mivhk+C6BMIscawUdR5m0MRPjzRLZAFZMo2pnBHlhE+NhELJGa5YNO42Jh8VCIWCBnMEu8WRf4WC147sAxYjGLcjPDxiCaBDMxS+MKCF1cUdXbF+UhEh0CGqDjksz9CZ++2fRiiWyCgKw532QJjEhMYCR+A2COQoStuwcYyw5i8a2K/QIZ+Ei/YWM41Ju+UGBUI6Bses4eIqf6Nzkc+43N4j8QEgQxdcZApe2OJdRp/R/G+iGkCGbriFmws9TqF4b0QkwUC4SNmwcYSu419xuTnE/MFMrCSRT9FZG8s9xmTn0xkCQSKfu4Di5y9sew1Jj+NOFIgC1hG9q+y7b+s+QnE8QJZYJ0n/g+rKvoBYuFNibMIZJG9sYQx6Y8n3o44l0AILDKWOtW/xf/g8RbE6QSygGVkbyyrxuTHiJMKZLHgjbcY0bPEqQWySN1YFmN5lriAQBZJxlSM4lniMgIhMjaWxRCeJa4kkAWcdaIxFZ17lrieQBazNpZFt54lriqQBXZ9g8ZUdOhZ4toCIWxj6UP2U/TmWSJRoDU/9V1YIIDdcONr9L64dond2P19T8QjmDSDdUYhTJHpcR7z90Am/bVBx6NtFLcIv+pXAzfgo71qaFAmWx9linjYl9UWIJN4zD3454527ncD+DP7g5nBgyI8S5xCIIMHzbCbKjwowrPESQXyVD48aHXcWCDc7dm/Wxk8qKcymfZN2gJ+mfqDDODhPJUDLmTrAeotiFaBLJI2IwYP5KnZ2IaeByrC2xEVgdCFeCfIqzgexVNT0T9Ab30VqAgEwneCjIrj/j01CVFTFuKrQF0gQ/wCaQHJJ1Yc9+ypYcKawgXqrwJKIEPfmRMrjrv11BhTZh4LZGAdhDFNqTju0FN70TW1ZTdVWgUCoTFh1JGK46481U9YU70fITsEMrQxjVQc9+OpTnRNhXZTpVsgI5zKjorjHjzVjK6pkWXbKZCBm1kYU2/F8bmeakDXVJfdVBkSCGB+wpi6lo5P9FSEvpF77abKqECGNqbGiuNTPLWNrikc2mE3VeYIZOj1DCuOG3uqhq6pEbupMlMgA7PfMiY9e27pqTvEGozbTZX5AgFtTFsVx208ReiammI3VVIEMrQxYbWLS+KjnvofXVMT7aZKokCGKIqi4viQp3pOTyJdIAO3wJYx3SqOk/hT1FSS3VRZJBDQxlQUkaipPLupsk4gQxuTjmy7qbJaIEM4SzXW2E2VYwQyhDHdYqXdVDlSIKCNabHdVDlYIOPemA6xmyqnEMgwYzrQbio8Pf0HxndUxitiwgUAAAAASUVORK5CYII=", + 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 282/336] [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 283/336] [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 284/336] 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 285/336] [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 286/336] [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(http://github.com/pattern); + const url = build_wiki_search_url(http://github.com/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(http://github.com/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 287/336] [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 288/336] 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 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 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 289/336] [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 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 z 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 VM&k8TgCu&A?EOT}l>7XL`5$ujG5Y`j delta 19693 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

      % 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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 290/336] [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 291/336] [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 292/336] [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 zcmZ8mby!qiyB$iJ0bv9Nq+z5%I%Gf^Dd}$f(Jc*!5KttPA*D-Vr~#x~QlvX1q>=9C z^7-B8e)rz<$9c}P&)Vngckg$-XPvd9ocmoWw6Jlz3%-${&_SR{gfTV+u;`r1LmZe{ zeUEmT9)foKie7tEol`?d+kQ$yhfBB}&&*2srPe91m=bSgY*Oq*f;xP9w|Biam|=9L zZR?QYP+v&;j@!YiLX=dbd+7Nno=P&Y7olG{wx@c^AS+|rw6&ZXx_`<{fI9iO>u14Py@i$D^<`msL(IKJ{M!)ez+komkFwTo~hB9aH-g^i?qdb8g1p8QHghxCEf{ zNX=~e?jL@FQh^gCg1&1esEC{Uut()@W{5?>C9C*qZQDUeKPg$8#?G`@ z=*}0Po>vE==I=4ARAP7i*$IQRl^2v+@@HrUF`v8DmAJ3cQOV{Q#Th9Y}kG@=0)2}Tx0M~jHh zD-GsXcp`|vG~C&u-zvy()lb+RgGP(CaNmljUgGc(Z`5Mo*Nl6p+#)hDSM3zzpT@Iz zNHhPHyvc?|5*?`+ogH9sRVKLe=$vs#8|_21!@kXR_eBE$8cfE#k}hmrPs~a}iqMnj zV}9L`joC7%cyoc5N`(9Cl0cp*dEk-iByCuv>nGSQDad9(t4Yts)hl;05J+!x@QA~Z+L@_pixD4FHMa0ohwz;k^)wwl zQB?}@_&mt%}bsictk~&H7v_5_q=;j75m87GtQV?pxKg&| z3__UmkX3Qv@u3sZ3QKoX1DaNb)nt6$0Zr^?IkL6G~IOi-w%9blNL?%!{+$NdB zr;4?=wj4R~&U<$FYu-19EIRq&)vN85h)a`VSThz6&10zXr&8Ws4jlfukgVAxPX0O# zK#{qyz15C%QwNPRU13~`I$WRbnX`g?auGd&zIIx>MrC?Xw+AtnfPh}>!jVpdR=Q;PCy2s$Fb|!8+6>ryA3-K!7zd?$_+9&3Xv-YXa zt|q4WJZ^CWcrcQg7&4kO?O8K-y8Y7dNM=SKHLX~FH1_n1a)3))J7t&gqKSU}2^{?6 z-R6j;|H?A2;?EuyMOtzE4OTR=J-@O`f4wzTOaa?CpS2he#rBL^!``?uja4(z*=rVm zR{kz>&+b@u5019z;MiUi%j32DX3Z7%%QC*CWuOI0d9t_7RL$i&?ht)U+Us!>zah13 z;1@aDm^$YyMyE-Ck0MZFvBF@OZC#Bj@05N*2T=z z;}0E$8u2P2nPq@#6pFk6mAT;)$5L|^9A8pkw!^xz{JV+Va;FQoW^MOp@Shb^5D0XC z|MwK1`p0Qrjv&mG`2b@)QHR`liNdD(%n#Ex=uYXQu)Git8A$m1U-tk>YTUH& zfV-=`^}X7$ftBw)G*^Bf9q*4u@9yVTY<=r)&n{f953&87m!Hm#4Wu|Ougk}WIZeWIx4j)3 zxS!deQ0Vwx@N&-in^~)D-JoJitc{S6Csgbe!?y|CiG7mj9#!p?_NKh~1&u!zra~-n zo5$JTLW$ZCy3;m`YQG44Eo9+}l1XMW=}LZLXPT{OXBsGpyvP>Y5->#8R6Xt%xwEg? z&>pIE|B3AiSVu{uR!2&_O0x0SIlE*1bt5H9t8rU1s}Zp>#=_}D<+uLJ=v5^EG3Ckc z25FtpYoBmh1_&yi2Agbfoob7JkN@&WeI!Dw6{~vO{N7=7+xY1|ONESPm-5My)ou0P z4vv-qh0m@e%gL?o*|;o~93K^Kh7P$5HdzzRB>^*FBTfS&wntVkmA zAl$pYo-E1W5|Q4h%k1rBHbI{f%CcO(#XO-dLAY;GGr->mITHsTP`iZyTG5WMr5H;Wtv^!f5mG;C(MlP_Rk_pPChV5 z(G41dFIQT85v;k5Eg67}QMD#N9ctyYDRhr#zoo{KEq>+v{79G5dyCEy>on#D;FlP* zx%Yo6e-*c)yWp0_wwH|!TY2KlBtus?=gwVvRFSzwMZ7Th_IL$Z7+EBo{}o-UhttHm zx3Tyz_>q$8b6&?j5#K4DLukRceNeGvYU4HRbK;!XrX#)5k8TwxXDI~VO^Fj{lP#23 zu!G8LwK&ccMOP4swbkBd724+lC=sn@q=yBdL-0H1mr}O1P;@VZUx$R^y++4p2zBz; z2*xj#OtZv9Pm1K*YDY<`!#9bB{onx#x2keb<;?uw%Dyf+oudPO9IKH%=n1)oqh@?2 zY)|sAVM-jQ56^ZQC8bup5TL5J&&#u5PaN0rVDs!7%9+ZVqor*zQr7}f1=!ef%Uu*u zS`KnxRfB)FJYX8v3Gw`qNyMz7fg*in2a{}$3mpfT<=B)Cc;y~O081QK z4a%_gSkA@Y!Yz3Z=LV$LHs5o}O9@l?k$Js?B*C497xy?9= zM>WwWq8q}S55!Y3epHAjQ%2BtxQwOrqXeB$OwSbp*l)8*YSX#NE={Xs<>3)1RfaLX{~=znWzs(5Z=Gw!BcCe?=nDvUkK|9aGdUei!838PgMmBU$=O@=~FQ6(kdw` z0zm=<-yTIMKd^U*WlJNZ5!YnC9D*DPMcnB(Tw^$_ZYxyR&$4O}(L_u|PHeV+c>Jn4 z4x=7utOXv3k$}N$*rj>0q=&n?N8`<%b!A>%%AuquqM>m}X1LAzcN*vB<>cj)6*Pj+ zJkJ!&y6hZ^CP2S#$4Con@G@C0!qO5LnIUSZ{0#Jm_!VwX&?Yjb|2%LnIf7FFoRzw0 zB=rp@JoqU?56V_l_m1-|Zk9`Kw>r2(C{{&mDTPKQyrD}!cWLM#d$^!**hV+kj?9_Zf?wM z7JA*nd=W(WjGwv7Yc*`+T(f4cG~;q7Gq*tBt|;=VBqAC0%Ct+B+|laF*j^=$^>~o) zbueF2;sT#CBUU5I$i;h`Cx&FcGyrDO1Ryv@=mjHu9`Ojc0fPYTTdu z&#?z}^MFO#SCexT4L5kQtAzg9ia(Q-vjW2=L>l;}Yz`q@X_UsQSF-t&!N+mydai>A zrG3YUU5lSAlQN1$ott~1v#}5_la~0%ZQP-;s#Q+=Af44RYa*`D%nHf0tW%rY!xQA; z_T#ejgpPT-o}$hxOkfqe)e#kOM5n-odqZ629~%2NE7&C^Zw%P$JUA;H%(C2l&-= zdGl{=c{zfrd*;d8fBI2fWgt|=7gGj%=TnAQvJv5d6)7sZy5`WBx`-ivdGV?9Yg+QY zIB-%p?vE7l$!)!C6eJRJY>{c1hJ88Xo|6gw_m2yZ0x_CbK5(Svfgoi6%@G@OH)|_R z4>wzsO<{g8!Ta$jP zN@l*=B>h^+x7A)hvW=w0pF-3F3*w$^exN^jBgZ#a6WSTUWe@e2ZwS7t)Aa`scYo%= z89%}^6uWdJ^pO@w7Kxyou@f3H?7Ta#^w7pncPUo}e_`^o6bnAFO&vXbBC~4%+R?h~ zpO{dY!7Vy2d5#@@d^0sA98;Bln`fNnd{#)jZT9%j={nW)fQ*bMcm`J0quN>u=%)mD)z81TV}awulW^U_ifxtW$!=$%*9pq5!=En zoL`SuO8Sydyw(|PVD?XPFDh70cpZy%PLh`AeF>Gq&V`(ak%_EhKl#5AMerrx+!eTg=kn}1-64Yh$$99AUa=R3_0SlZyxL9B033@ ztKmb~@ZYzv^jRVHBuc_b#a*Aak(H{cu9UfA6!LZsDg`}B);H$}kSw(b zcaQ4X8?F9}ETbFq(`)B*6Nz&+yaM^!sM-a!k4&z+I)tOYQWT??2fC-Ft`2NW9}DR- zi`8oX00+bYFBK3{+q@F=9N}m8K?I|LGb&jE-|(XIGqA7&gpkP9|4!l-RzhWs(D*4anBlMsl<7S~Tvv)L}EmfH;S zD6%|;AW{Vo7bO-mlK2@^N#XTx2IVokXfmK8&!Y04^(}iB1o6KykU&vZ$@+t}c3|bP$ z5@uvAeBTSQXj&#z!7U!6b**gh>b{caZWhJJm%?uTSzc>=^^x=^DRRyc)~p=5loFnT z8k3j?+;fUYa)`8~q}@nRqF4zjfkIJSb^}f){mGAlEQ8ceb7`yOQqu|BD{yp;LE*yK zbu2jJg+*xD{G=5!)XT%WGoREdZy8L-m2aRYHb-jez22X-snK44g|zW(WVMl@&y!(w zkl_-IV8x$~4m^qQ91^tNC&`;CHXkrcC?F#Pnw&s#E-j(xc`Adp=`Uw_TE8XognpvLC%!Br@=5b5P4TbBN46z zES`leSau2ptl4VEJx15UBcY%oQo`fy<>?!XBW8MjVHb0JGPyFQlU{rLChj1)59v_n zu0eB~4ek+KPs=N~Jb%j}QK-5fUeU@`QaU^tRxv~(!F6DC{cJIQo%vixjqT>M^uc<$ zY6RB=J3SIW`1j0eM@L*Me*%;BV+KuJARH}s7VQ7HbcRI4LMU@*c z;XY^nTlct{SK~W<%q)X8{?c`G#bJ-lJg?73J(0$h$p>v~)DnZu^r`#SkeeWsb*Y<7 z4h2@0H>c9KzL7t6B!lW^Pc=idzlBggZOid-4M=cR@o`+58HYx(w?E3r<5&}wH{9Uw znm*!Gc*D4_Zelbg_k06*Rn`9G(76UJt@DuVm5VY@j|)D*sicg2-V%n!zVZYbW{-L> z<{AeJNjqSIEjRm-T-16sK3~jcag28_nbVt_Xs?+Q+j5NmHNunEKQLtR!EZ7~nitLL zyGqKk2!CrF;$AB2J*YeIa|)`TJ?T)t_@MK%A)ofH0n-&YxC)cwYj2eB#d+Tb%MGA~ zt#Jl;8*!?C?pzgQVp4X}QB*=0ilziq>ksbLDqdsw_+OY>JjbQ`l>DlgOb;$DLIMwpm=z$V`oFgBgVgw+Ll;rOFN-ckju?Id zK@dDZ|G#kmA0%iHAtXRY_5Vf7f9_u++ytc17nu>l%*+pOWkb6}URm6&*1iB3uf>B5u 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 293/336] [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 294/336] [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 zcmZ8`1yCGYu=e6^0fGjH4YEjZ2@AoUY;e~E_uw!{fP^3kiw3tKi!Bh`gNEP)4-%Z< z&SF3JzE^esdQ&x1T{GXAnm*lMpKtnvyAQfm>EPh?7JVZ_qJuzFa8n#=V97O|pENkT z_8#pjGYsuSjaheG8v+y6b)1&g;}z?~x3E!vp>qZ-r6t;!nw7ecA&;Ki?O*Q?XPKPq z+B>B=H5QY<<8!j9k{}naoW?`F1)L-M?I_DVjiSG>+l?4`iQl4ZtI0i1c)EK*Ax#?E zxjN*=dg+v9d3zCd21Hpv(kDvYszgVGGh4o&G5^=naSx~YdafUiUNZ03mH4|IdIal8 z4fT;mPh{A*OVClyo$224i0b$bT^*OE-kWivvg|iI9n9n@w@=QzibHDY4SX|upGyA*ptqR=M ztI{5}nJj=JB%82+7fh1C-)VOF?)_Jp1JuygcY;0)rhG6#mJ&yQG~yvQX;uyuXRD~s zt4)?Dd~tYi2HsrB9}PsL<|mx4VUs0$sDITHA1UaVFLEjPYt}uj;u0b`U+WCxP4jso zWvdWM$!yaqg^65}$pJ7zRfz0jU$BnoqJ4;UIO1kx#ISXs z6!EF1GIwjmLBgG~qFffVy3AZWgGv`8;mi&vuLKO)-PxLsIH?IuQ!9UMO2Jc;zLw+1 znyO)5pNAnIDn7Sitlqnm%ZOS&icdkjHq<*>vl?|}Rtj##;%9h7Yx=2NV2=k^Xg(}wE(Idg08?Qv z?re7;-_k>aWGYX}(nlIHJ#|%9N-bd~G}O)LgjHvT^m>tE2@4yvFCOb<+l3JUop_~L z-h1y=##pR|99`mwRi!##U!*H?HC2pVFspK&5aUAyg5j@dMS;&MZeI(Mla4;qdkLG* zWn)i-R10p8-!rKvV&i8uIxiD&1)HmkUH*(Vw-}JLoTYgkuQue}!qb1CB9_Uqvgc9z zel;+0V{m@V3aP9lDhhvUyZ|`>TzV&C+Dh;f3-*}CLb2%t%P{dxGtx5F9B zP|doa>hC@lbw+984OT3ov#`3yaHBn4QW?jzkh2t!!10b*$Js=g$7`7Zdi$+XPb=R= z?>n3*>_gF(oSZvL;`x16Ua!03eOV!pu@1IEs!#QIm}|LRCmf+q$oV{K5i+J%2>zmI zpW0*nr(8B&7r=Ka8rzBw)*sn<>dO`v=Dt+kmj-1hnq^b!r+eYlKyGyt?`Glc^_PiS zi*${M!a7JZ21!+f%--|^5;*G4Lleu2EOt3pSN^n6S?~7X)vfRS4E?)m4g!Jh@Bh6d zrvG(WP$Y~nXFtT4OxB}vU8c6HJrBUN54ltQD5gALf1pn4dv!#Zc4(d+U*Pq#kv_JT zgbxTtot_=9{Eh01;sb6^HU^v1w>O3cml&nnYw!J=f45xu07lY*f!BRNiWVOuH0Tbs zzp-CGF|_)+#dW!hk~K^_0WKy}(Kjp)e_ zm-I4yXHQwHdPPzFA&kyBY`m$N4=NWZAFYxdg~ z&0#46ZE{#7@R-iA%FWZq1MQTShk__%8cHNohD8JsnX*{%+I;<^XFNc3JS)}TgFH-# zTGKiD{@BYEi6kT_l7yB(C~4Hso+)F{1js6WjI}jrxK49k*-%Q1aG8SU@Ax`5@jbOe zBGCzapp}q?n>m|Y{g6^?tj(~n$8_9Pqqj+X$pbO~x>rqSwWGN}VNvss#py6>yw*wX zx3t6^aQzv(C9U6t{#FW56`2%^*-X^{$@5q3Xy-7bbU}2ReHjU*g1L6WEn@fJRa0lU z>is7!)CN*Iy*64}EyXTS@BEJQ_l>LqBkZdK!2xlh3)uK=qE-!1n)4U-f^<%q zbx#3^b&!b4S*Y12@0qUD_rx#Q+G9~V?O3&wmiJEMJEl(#II84d^{AgN+uYXvJHpvI zsQ4*Lrjp9$o{QI7)fu~ZD}2OlxW$%uK4q4~1Y%^ug>9qy1h@FTT&a%%B>1@)O~waV@l-Cm0OoBv_eLQOSgSsnHyDtsFyM!!T&vUaz&(4u zo-WJd5tH9&%kS@Ix6nQzQsB6Hi+M_42KU^iXMw&CaU~5sr1zlsERhfluLNe;XONrG ztlOO`h-F53mG;qQI{HrwSA8o7KC9t2xN%%qk$x4_2@Dzi;j*ND$rZy+(A;XkKxwoe zHA4A!ES#J@8TD&LX5Zty$ef>M5mQifN2SN+XUPCam%R$p<*o0Fiu3M`$mb<9AH=_r z=agbDc3c&L*A@r8WL;{l^jp4X_~U5nT6yZ$#u%g|RlI5I(qI89rsvypa)U9o2(_bok^LaCbTvtxZ4-)$ymth2ZqA?abe`@knk zsDxGhMUM=w{ahUI>SI?nd8XodPrmZws_bn#(#7GoC##6!=n}EQujqhIAH>YIzq#}% z6kApEnSk?vxc{`?5pB_=V@Rn?dh<2-bMn08mNT>Jk6sO0NI4~ehbjbjiz}Q|q>IjH ztu(hoVKHbWO^?4GAtbbB{~61xJw``l%P~5 z!x|GkC0cO16Dgw&-2#Y51E4|5x0;Hy>e+>V)cxJ^y2pnCc-Er((3A3w$1McSxE>ea zfK_?U9$xM;PEN0KDNNVsSWsZaojj@M#pOLPk~f_*&&b$jqOFrI%*B;o>86a-aZ)7F zGRA{s;?sWj z{7P88$CjsL5Y+0EJ`pkL+EtK;Nz4v|A<5Moz%s1~;gbNnBA4o+fa1d!fRiURL$YkW zR`Ln9@ygyq`Q+BO-g`gf2SWxANwWV#97n3dWA`uy(=L`K`Dr$91u% z5}RUM55&_j#V*E|uOJ*aTESBNQHD+=Y2Z%jxWgr*%jBW3Jfo3QfKRAe9Zq>)_4N)- zXXA^;uf|9?(fxCNe63FA9wQ{lb1_3JRiC;n;?SHRG8rR8k_w!r^y@P1hJsYdgxdjdPqj#0*i>(Z9AjKRi-vO~7bu zt_L1?k%Yl+-1F*m*#K{ApTUw%!GGo3Q?y@MGk+hrml_2TCdo-(GLiiT z790MQWkAbS((n%Q7B9za0FBEP^x#SM4@^KzQ@Ppq=A}b zyZOdF;D=&1RCl`joYO-Wz;k*B?ULUY_a$E7ipzOOv?|14LNbGNPIZe6Ypg%a9n*LR zR|Z_P#+3B?P2gn*n|)GiCZ|~747Xw~PG31XWoXWE&iqz?W_1Boe?n*YzS+^k)RNhi z;A5V7R_HR|%O~Js5=CzP@9k~FV5!$7Jaol82W~R;#k#;lfQs%yC;8}dO1t&+*mF9M z#{PwF;}x5Wd}>Bb=)-7C>pV_H94arP7&4xsQL^8@SOQvu%9nq`5YP-NzRo49xuZ3Ek`5P3vUkJWBT52!U|eRyMsPXm(V3OATFj+y_uby&>L`>=O=BY+Jcg{a2q)_ z)-iJy?-k>YVq+zsx56ITlCQ96Cvw+swfj6Bs2eXZ_CSz`h_AKyoxE0-XmY|*3Mh5_ zY7=uyK*Gx9smtFOdsNgsnP#m+$3oDRR3IQdN(-2CRGKS%6L<4(&Yxro`Sdo%r&mX9 zy8Pq`WkH)ZWl|N43-Ug+WU=XOAt$H9U$zE1-^HJl?^G68c@*wMnZmZNzj}DEb6FYm ziU~#$6R>{ftE`9FC%EU#pjz6;x9Ft-nU(zchW>PlGUO=D}26<(mkPcZ-4Y^upF#b1rUGtgAB17Ns2UP2G}`Xth}mt5MbNZt^0)@Je=_z zD^5K@s(jiw7JYvHrQYUZqI^a&w#TGXb4|OV?qMdUbTH9gQtDxV=$QvzA^W^?l`aq zU|?7I(r88}IPu;EI>+-V4c2F+6ZQ07W3b$b>(v)%5ERC22=-oUD2xz)VqfDsV2qL;5xye(kp$3|bS`D2l z#yipi5RHPFqoaoJ5V7Q%(}*DsQ{T|~J86GrvqNbw5?XpTps7r}g~ealn+XW0>+u!Z z-u7_@)%Gn=b^Z*XLuJ7=rIyl$`xnwiIC9~U!BuG*`udi%aSc%;fl5--7uO6_0|_K4 zk$6ASq^5QZa*>qLm=jBED-7H#S@#e&=s*8XfGmjBvigA{Z4dmQ_+N_HS$f#oyz=s} zcX{(KQ{L$h#m$S5woz?K;!1qOQD}BX;^NPT)`XH{G?$Y}a{Aj8Am!h&=z6pmwrgY; zYE3b(mwj9751`mgS^6nTKeQ<2%@qLpTQGKVgZibL6{Hd0Bgz6Q~UJsv&Zs#Mxb4ttHEEt zG-mNiPRgF)#Gc$tPmB6_j~-`ZED(dIr>C#1HrA{nKN_=Vq$f3`Cf!+xwct2un7Wj0 z560(IL*;Rh!+L{lI40AMKrG~@wWZxyCCQE`tL4_{z(|ay@TiH;qUNl5w}|(hciPy_ zrDs_^a#{wk1zY>Zf+-ZmERUvXCP0DNp~zB{XN^Dn^{zj?OASc z>+}o@gSHC)Xtqjt^fstdPzAh@@J_=K{AJrBKjWp4%FBVxTiM)QN&s_djeE?#I0yIl zqt&v3)Ki}g7CW%xvzJ-FFSBA>{h*8yni|Dc zBV0d(yW!{`XZpX}PyiROL?k+$ZGl^;R%o6ASSWO2EaU0Z#xQlT@<#Xfj(01Ogh5GU z7$jifND+pwny~Lva+Jrj{f+}qcjN5iL!`ZqAg-}frzq+{8Xhf@f$UZw>yiIN8K{{`SK|F` zvo|08hY^xt;NIhx%E*_Fs7?ty8XKQKcEr8|C;bZaG90cu{cp-zq${z=sbhrnEX!Za zjTrQLfJpW>qksVaS0f-kKd?!2k9E@%qTZ3gtcIf&x7Mm!35MC)!1v521}0iqSvk%* zPDkqoOcMbMhCR;lZSBwrUJmZuWL1&5kv}$Kkx@c!TYMkN>n-`}%k9?BFf(SV?7E}M zMFh@?ZW08_$3_i|qWvOCNPPM~^YJ1b^GbNUHqer{xAZTlObuUWzn-ErA~7?tlh)2G zOF%gW-hw+7*0O37{>IW4+%kO6%$oWW_$aC{W{Es&;A7Wmx;{7Y-1jA_8` zN>IOMZGMqP`0T8)%Dwr=do;KV4n++k2Q3Efl3lW0K zVUm-7inFl7PLL)nA!L_H{h=+N8^p91qb(>SM4ouhh`aDST;o$L&Oc=WOR~s*7#BVQ z76D=ll_wBmUI&)(E^ZQ2AjLXCxSh~_8^?eRd|$dOl3dD7w^jeF;l7FywS}nGOn0Zr zm!wv5aMCF1OR>GVfP)n1#rgU)&tK~dUgntGSe{+GUYJQ=aN!pz)yLE?YJFsL-_s)+ z|DC21yE4=}Ba1q;Gk+v%$Szs0`-3DX0eGPdm)#MNX6A`JzYifC51!S?5&q8B8a&l{ z9>uChPqb%s`;1l+VbmKyx95CL9_YFhLeliDH!ZfEz~aNKlNVyqPF@VTgUC`kVbnSQ zXmA=v>9x)KQ^I1d$EEEyiz=PpC_7ViAMbQ#(riI>4O#HV6rzXvl# zUtE~YZf#sDSiKTZ75f>oEQKY;%31urA7s_CLZpFLI>G2(-Q?4YQsQfsz$lc(Y5iGQ zZ;JXz{*xRr?+k8L4_{7;OhZmc&j6lzrDJ)-I=5e^ zt+RZ_8pZTXqRuK@eN#}R7)}ER?qqQZTCNazl|22*=-%unt?FAA^GWp^+Ecq@E$x2a z&${$zFTYZD@NedHP@peRV0BU85szUdo{bMZj`AK6u{|Iwm@c&(vPdeTpa5E2K#Fc{ z;phb#!}ggk=J?&2eYJxfo7UjMuZ|7R#xnBg+D@NKdkppQk5K;*D>fJg4U=Iie4w^d z)|AuPDSf;f?dnUsZFI5~zoNXyB6uDJU9wKozxbn&_CY;|i;Yj7)B=X5ZKZ>5CTyD| z`-Mf(oUgCRI6fG0SHd72sRJyXM=V-*iw3RR>n1!x*TE;FrXyCx7wG37m`EUHdv@s% zcXB$lI-!?YfATuvFm(Xo)ZhtYxXmT$6WPcpD7w0M%OhQ^c@SCE&RbSKIu%hhLMF|7 zXmb5@DRG1SLQjk9=Cj=4Mx|yH?=Nm<1c3HWuLuLAt%iX~0m261!nJU)YH+z((XcvA zm3lO4_<1Mqa6483T5p{tFGWPdgNIori<06EMS3ocl;6VY`-CC~3DeA+Vnc@#Q1lZ-wAk zPYAt)dkX{xhb=v{txOS?C3A-EG721G-2ReWV~y_ zbO#PmN)dvc&C>q3?>oTxL5$#aNRY1yMEi61ng|=4x{IEQD%@BiEvVLTc)wod8pAK} z(%kA9o^|_IZV#nfRXEuZ=9XvnecT_ae~VTHuOasTw_5nZwZ;vf7k!Rq2d5Exj>ZAk7vsQI5c&u4{{Zr^Ho*V@ 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 295/336] [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 296/336] [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 297/336] [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 "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"; + } + + function returnGreenery2AsBase64() { + return "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCACmAPgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6S1C4jjBeIBdxO4glQRnIyfTkH15z2rhdZaeeX94GMLEYBAXeQc8H0B6nsc+oraW4e62s2QjfN+9O7bjts6cZ9TxWVf2jzb40SQscoGYknnPAJPtjjjIHFfhOMqL5nnybkjlzo8JRI58STEnzFcZBY8+2ck5xwckdQK5fxL5ul3TKJXWRGwHZsq56BZD0344Vu2AG7EdzJZG30whpnmZF2YZPmYDBJPGAcjtnGTXEeJmgubZ4DEgErrE4OAG+Yg5Ixxn37V83zXqWezOaSsjide8Vp5chuLO6hJGGV4HV1OPuk445B9a8a8Z+Ibe5uWKFosjkHcOfcdz15969qurXWNVikuzqt+GlJaNFunGEJ+VVG4cAYAGM8VwXitdY02PdHq1+qPzuaYtwT0G7vz296+pyqWGpVbR323/4AoOCkcf4F0+81rwv4w0o20zxvZjUIGMRCCaFsjGR1K+ldX8PvGj6paRR21rLNsQSGONydowRuYsdqj/abA5rk9K1q/8ACfiWy1xrm4vLiGTLpLKWEkRHzx8k8Fc5/Cu41PSLbQPGcEWnxRjw1q8S6jpsUfEO0gbwyjALBsck554xXr5pGFTm543UveXqklJfdZ+iZ2VVGpS519n9TrtL086lebHKurjdtZMwjrgAYHm9Opwvs1dGNHijFlMoXPR5COoAzyemOvAwMnpUemWZuLSF2dFIUnYB8xOASP1HJ6GrctlcztjzEjhQqzRq/BYHPJ9CR296/NK1VzlvZL+vmecrnE+PPDsMc3mQS4kgUFJExnPTAP5e2M9q81utQitTvMZiSZxhVztVx1UH6YI56Eele2eNr2I6CXEaW2yPDNjJZsdefqPzNeFeK9Im0vSIrhn81bnmSJj8r++OxzkAjkYFfX5HU9tBUqr62R0Qs3ZlG7KzW9xMWBQHCheOe/Pb/wCtXA6qF884GOcYBziuhvNQe3s1jgk/0Jj8rv8AeU45V/f0PQ/ywbiFH+YHp1Pev0fBwlTvf5HbTXK9T0qO6834L+H5WTzUtdT2sDycbyOPzru7NbCLQEnuHPIC8sSAxHQgd/oO5715loZbVPg1eWsLxRyW995oeZ9qrgqxJPau2+HniiOwkjXSbj7bq5G46vcpiO1z1FtG2ct/00YZ5+UCvh80wrftJXtyzk36Oz9Fv/kmTjoc3JO9lYvTeDU0yQtd25m1t08yDTiBssflBWSfg5k5JWHtwW7CtLwx8N4YozvgEkpJL7sMXbvyeuc5z3yK9E8NaDDb2QBZTI5LvO/3mYkE7iepJ55JOeK2bXSCY9kcOZ9xA3HG7jpg/iRz379vja+b1JRcIuyR5TnKVktjz298GLaXNuyQxx4OdzDKjnAUg9Rkjg9simaj4Ig02ACCGOUHG3auxj64ZcEDjpgiu1a0kkvVaWMmQNgjGQoGQM57k7uPQDntST7Lqdh5gVY0wSzcA9uPYcc1yLG1o8q5tOo03Y8q1azbT8gTz274KMJh5gK9stGNwOOuVxXIaL4dn8TeO9C063azdpL5GYLNwVVtzYBAPQHjFeleML1YHmZ1+Z+gRfuj+ft071zvwXiN18XbC5ZmaGxt7m7cEZ2BYyAee+TX1uBryWHqVbJNRevyO3DLmqRT7kkkCav8RPFWoW5mmR9QkUbrhY1+X5ONq7iPlPRgfpXUrpvlWZljWKNo13YhgXA5HUnJPbqTXOfDTzpdOkmW2Mr3DySqWV1DbiWDdD/e/Wu7McsenOzBY5HXcc/NsbHPLc8fSvEzCtONZ009I2X3aHHWm5TlIgtbh0jMTRSzyNITypzknPX8ffjGKz9eRUt3kjVWEqbmWQ9Dj6dsYyfUe+dmBIXdnzukikZsSHJwRwScdNuP0rF8Vs0sZG5Elwyn5sNn8B0wo65ry6dnWt5i3PMbXQ4PGfjrQtFnmlC3VwkRuo1zIqL85Djo6ADAJOV9+lb3hedde8Ra1rG1U+1XkkqEIGO0OQoG4kdFHT34ql4ImNhrXiHXmKJ/YWkXM6t0fzpR5UfHflux7Ctb4a2ot9GtlmJEm3aSRzn6nHf3r6/MKkoYdq+yS++7f4cp11Hy0IruehWytBanDEAkbip2hue5GPfis+5bbeSbxvGAzM75boOh61oPskhyWIGcEnGfz59fWs6SaNmLH94WDHPUnIOK+DhdttnC2c7qluF1TR48FnN3HjeMgDdnp36UVX1PUTB4ghkiz5tlbyXO9hk5CYA9M5YUV7P1KtioRcHsuvmz0MPVVKGvU+sNGDupBP7xDnC5b5l6dzxjPtUl7ctGVQbllwpyTuLdwAffaB9aj+H2pxXSWkd4Bbl2AYu3yg55JH074r6j8ReGNB/4QKaK5itjGtuTHN8oO7HGGr72eTfWaNWtz8rh07/5GtBOrZQPjq7tFMDTs7ENF5bR5wvr6cdOh9ya8715Ymu7P92wXzhkIxBHXqfbnGfQcV6P4ijurB7owK58psNI3yRhj/ec9CRz16iuFHh68vdTe4uxNcpGrBorQ7MMVYBhvHzYAyFwBnvzXxSw86UuaeiRyz0aRlaFO8thZo6oV8heSST+OM84HfHSsDxVoSSwtKdhYEZP3iEHcYHXIA6nqa6uz2KPJDbXjXEZA2ggZAOCPqCOoOc81V1kKbZvKYyyAgAKfmz2xwPfntg/WualUlSq6aMwWx4H4vtorZcxrl9uNpOAp68nJ/yBWx4X87xn8O7vw9uKavoDf2npMrfeki/5axL3I69PUVL4w0iSCaGWOFSHjJE75bJz/Ah4A9CcnvxXFWesXnhXXrHW7Jt91ay7ss2TIOjKx7gjIxX6RQX1rDKMH7y1T81+j2fkz0KE1F2ez3PaPhv4jjvtMjnmn/dyIuEPGDn+L8e3T2711t/rkNsxJI82Y/KFBLHr0AGT3+me1eN63bt4f8W2us6Mh/4RvX4/ttuxGIrWX/lojHouDk8+456V22gwR3E6zTOZoZFwXwQW7YI/hTjgdT1PYD4bH4GEJ+2v7r6df8Pqnuc1Wm6MnFl+8tG1iBbq6z5DPvMasMSAYyFODk9eRxzjPevOvHUKahaMFk5QHdngexHseuPY17XKsS2iW8J3qUG3PIXJ4/8A1e3JxXj3jzSDGrEzYBLfP/Du64P+yT+Xb3vKKt68U9LPQmN7nkVwhthLhRh12ski5Vl9x9e/UYrBuYN8bG0l8snrBM3P/AW6EfXBrotZJyMqVJPAIwT7+lc3dvtUhRxX7JhnzRuenTNaxuprH4b6xAwdN8/fv8ozTvh34nNlcRrkK/Tf/Fj8P8aq6bA934E1xskrDIpA9Mqa5HSppIZEZAXx/dGaJ4WniadanLq/0R01oKcEmfbfgjxxD5IMjDbt2Lux16fQd+Rk12b+Koy8XlAvPKcLDFkksew9f8+lfGmh+MZLUxrJcuFH8EHLAem48D8M16V4X8dxSATT7VXGCCxBb2LZyfpwPavyXMOG50ZOotV5HhyoygfRNlKI4pnRXY/cc/eBA4OM/iffNY1/bRyWxZwRubIZew7g9+w7+tcj4c8d5RAkwdZC20qwBXBGTzjg8fju9K6+e8t3gVTOHuCPuk5wOv4jPPHrXydXD1MNUfMrXJ1POvEulylZS8zhGG0ZOeR6hun59qofDYLpmhfEbxArxM1jpJsY+CDvlOMgj6djW54zkCWDNFIjbiQBkZPtnjOe5z6VjaM0+k/BOUK3lzeI9dWL5Mg+VF1xwTj5T69a+swk3LDNPq0vxu/wTOzC6Scn0TZ0fgKSO30SzgR5ZdqAB40c44GAcfT/APXXQag7yK+yJlU4B3rgNnovPPX+RNS+HdCQWm1pN+QrATMSRyOm4/X6cVHfQJa3cbbfLCAA7F6dB2+vSvlqlSFStKSPLt1M3VbC4s1SUPM77CxdV3mQgcDHfnj25xkcVxs+qQ3Fqs0ccltvj81o7gfvFJGPp04yM5zXpVxaRyRl9xXIPyyNn04HbsePevK/HUZjmSOJlCzOI4o84cO5xxk/MC3VePUEHk92XtV5qnPfv+jNov7PcoBobb4ZanLNELufxPqyW8aLIUHk243uwK543sB0HTmtvw/o/kRpssZAQMgJfvnPOCQy8/lUuvaXFaeKtP8ADaMlxa+FrNLEygYD3LfPM+RyDuIHPpzXYwoLC0RiAEbAXjHH8vyrux+McIKEPta9dn8On+FK50YqfLJU19lW/wA/xKZka2tZAwunlEY2xtKpDOTjlsAjA54HasowXEMIZ4wFWPkSBjn9a6fyopWjDp87NubPA6cf14qHxIQli8ildqr1OOMfzr52Fb3lFLc4W3Y88RfP8Ma9e+RFFOby2tUlLsPkJLuOSf7oorUsbJZtH0GzDKTeSTapKGHbPlpn8AT+NFfQTxcaD5X/AF0/Q6qj5bRtsv8Agnu3ijUH8EeLtWsjj7E8gu7XgkMkoyFUDrgkjgfjS/8ACW6vqzJaXE1wGP8AzDvOxs4GTK3IiB4IHLeu3rXJaj8R1uvhp4F1S5PlTSS3GkXVzGu2bCAlE34yAQOg5ParXh7xLaNbwLHCsMOVflQg6Y3fNjIJPcn+lfS5xUjH34q72+7T9CLuEtHo9fv1/A9AsdQ1C20ibT7iW2eGQAPGsIAUj+7u6nrljknkHtVS5tdg3BvMRhyy/Nkc8ZJAPQdOmKLDUlucqTHiVc5buM8DJ56jHA/hBq8l8JYWOwbhySgG89xj1PbAr4KrWdZuVR6nS5OSSbvbY8/u0jjmkSSKYqd6o8T7WDHknGDgYxlQPmJXoRmqljp4jgGFMcy58xoiAWJz0Ykkg5H1BP0rs7zTzeRSS7N6vuTaMkKckkjt1OB69eKx7qxl04eUJGLkHcQRk852Z/MjvngdeMfayfuX1MeVo8q8daXcGB1LhsAHD9euBgDt7Hp/LyHVbGWOWRUygRM5bqT6Z7V9GeJbWB7JmQBkwQX6HPU/p+PAr5/1yc3GoPp9rG15MWP7uFdzMfXjt9ePevv8hrSnDlS2Ki9bI1fhff2viWx1LwFqcxjtdRbzdOuCQRb3a8jH1wD9R71a8IeKZNL1K50fVm+z39tKbeePb3HcZ9eoJyfauRtNIS0uVnuLlbi7ikEsdlp77trqcjfMPlUZHRcnjtXfeMbaD4kaWvjnRYGi8Qaeiw6xpMWS0ijo69yMZORyemQRXp5hh6Upu/wz69p7J+ktm9rpa6s73FV6fL9pben/AADvxcrfBI13K2SHkON2cZwD64/IHJrI8Y6RbpaI+VJY7Sw6cgZ9MnP/AOqsTwZ4wttQsYXikVnYbQQMDGeAB257DuO/UdB4hkM1phox5rLld3Qc98dsZ9uCcnOa+G9lUw2IUdrM8tb2PF9f0ovIViCs0jYKKMgnvkVxuqeHmViFDRjrhuVx7H/GvW9a0+XT5llZVDSD5g3y5I6nJPUjn/A1mzxxvZSiePYSSAxHb144PWv0TB5hKEYuOqOqFRx2Oe+G2gvd+DfF2+IERBTzyv3W/OuBsdAku9MSd9zKBnbyB+WMV7l8FrXzrHxtZH50MUbBT34Ydqw/A/heK+0OMhF27BvYIMg5OMFuaupmv1aviHLo4fjE9DEVOSjTl3ueMSRtasU6YHarNrqlzaHKMxXrjPH5V3HjzwS2mzFyD0zn+9XAywSQyhWUgD1r6jDYiljaSnHVMiEo1Fc9M8EeOBaN5cz9Bt5PB/yc/nXqMWvwXVmxBXy8DZC3TP1HK/UYz718x2d00JGD09RXXaJ4slgCoZCSOMMf0z27V83mWSRqz9rS0Zz1KOt4npHibVbprGVYGMwwQttI2JD0+6cASdMdm9uK7i+0l7KbwF4ZuAEfS9M+13Ebpz50x6EYIzjd715L4fmbxb4w0HTACYpbtDKFPGxSGY447Ka9r8NawfFPj7xJqRjNwj3f2aEljnbGAuAOnUtXyeZQeEpKFrWTb9X7q/DmE17PDyfV2X6npVrawW1jiMFXZOdi4HoPSsS7tpb28DO29QR1XOW4PBH0GT+Hqa6lbciHbHCFBJ3f7I57+vIrJuI4lWVgSkjFlJzwevcewP8ASvzWnNptnnSWxz+uSpJaiRlZV2lRznI9x6Ak/nXCeEbZb3x2+saqANI8MxNql6WYfMVB8pOeG3OevXI+lbXjjxCNJtnNxu8lAdvGDn1OPXngdwfYHC1e0bw/4L0rwqqN/bHiCRNX1dmbd5UCn/R4mx0z1OOhHvivqsvpOFNt7S0+X2n8l+LR04ZLmdWW0df8vxKXg+3lvLi61OSYrNeTPdSrewlW3Oxb/WJkEc9TivRyzSzwRmF4X3HAcY5HcHofqKh0XRRaWygrswMH6ke3HvmpLZVtbtTJhYA5VcdCxH8zivIxmJWJqymlsckpObuyxDFtluFkQMoIjQ7cEHrkep/xri/iNqJt9NFtGSs0hEYCjIJJwMV3moLvtN7HBByGXjPT/CvP7WUeJPiTpti8fnWdoXv7hiwRESIFtxY9sgVOXx56vtGrqOr+RpTh7Scaa6kllsXxTqUMXzx6ZbxWCKTz8iDP/jxNFch4bttVS9u72S+0pHvZnmZ2vl53MT2+tFezi8I/a6STVkvuR0TTcm+W52954bn0z9nLVZ7XVbPWoLDX0vi9iXXyozgOrAgMpy2cHtVLw54iWK1EnmRW4kXPOBkH5sY5J9sVr+BtettA8US6ZqageHvEsf8AZ95HIpURuwwj/wB0cnHc89eK8+1jw/N4I8T6v4Vmllh+wSBIZZOJLmE8o5f3BxtUYyOa+wxNNVuaM3u+ZPydk/uf5jqRjUpQqxVraP8AQ9Bt/iVGsslu5MYUgFSpJweeV7Y6jJH413ug+L7fVJPnnkJRzmPfjGf4m24ycgj0GAOlfLeuRyaY5ljwIuSQgwBjvt7djz78Vb8K/ElbFkDsY3XOw5yTyOOeO2c+przsTkntqPtMMZKLteJ9p6fdqAVilRMDq4HPQHHr1H58elYOuXES+fGPmYfKpRskrgDHt256kc149ovxOD/ZwPmmchQu45kJ6Y7nvnoOtb83iG71qXy4P3Y2l8pKrFRnHzEZAGfqTk8AHNfCVMFXoy99WXmW53Wxm67dGdpoIbt0tZpAhiiAM0jkbiIx93JAyxJAHXnIFYDeA1n0p914NMikIZbU5MMp9JJANzMeuSCv04rp5tJaxMUskQmmi3N5xLETBsZ6912g44G3PTHO3dpFLphZZFCsMNjkD8R69c5r6GhmTw3IobdfMwabTUXbzPCZrFdJuZ7chCy/ICjDZ74I7cdvzrM8J67qPhbxLHrdiN6xBkmhc4W5TPzo3oPfsemTXbeJNHae5dAnlozZ3HClgT2HXHv9ay9N0G2uNVazvdQj0oOmFuJImaIEdAwXJVffBx1NfcU8VSnTbkrqS230+R00nJNWev3E3i7wukUUXjrwZEZNDuGzfafGpaSzl/jJQfqB1HPTNdD4e1m0vdPhluLgSCRMOI2yT04B9s8npxjp1y9Jt/EvwqjuPEtpa/2h4Xe4FpeNC4e1uD2+ccK2D8p/OjXvh681mvjHwCG1HRJCWutN/wCWlo/VgF7Y7p+XFeZjMG5KMKj0+zL/ANtk+62T6+p1ThHEr2lP4luv1R0E1guuzOG3SYTcpAxxg7eT+ePQVzuradComOdrDgoCTx2OO/5VteC/FNte6YvmkB2ycsfmz7j1HU+mABVPxM8bW00qbtrEhQRnBzx684weK8bCyqUa7oy0toeeZfwgZUvvGEMcarMbaP5l+Xuw6f8A1qb8I7F5LFbSS53EM0TR2ikngn70rDA4P8IbpTPgfKs+u+Kgy4b7EnIPHDf/AF66X4A2afZ5kU5UTyEnklRubGQAMfn6V2ZvP2UsQ7f8+/8A0lno4r/daXqzptW+GRuYXZVw6qSGjJY/i7fN/IV4p42+GL2wyYwjDgkDnqeSOua+x2sIGiVN5IkU4kc9TjAxyR+nFcN4x8N295FIYlMkuCSQM5GD+nPWvmMtzuvhqq97Q4E5Qdz4b1Pw/caexd0O09xWRvlikDYIxzu9PrX0X4u8KW0ry7EVNg6EcKf88fhXl+oeHlhMjCPYy8gjr1x/Ov2PAZxDFU05LU7qdZNalz4M3htvEGpazICyaXp0sw4/iYbRz9M16/8AAy1uG0BbrzCHdjKUIPUnceo9eK8q8OacNO+FfiO+WLZLqF3FYI443KCMjB9ye1ew/DS6k0jR4YCFhTIYOq4P14Gccj9K+S4iqKpCo4fzKPyirv8AGTJxrtThFep6lDcShmDysoi5jC5GcdOvTp/kVk+JtWjsrYSNMu/oq5GOCcZ/8d6HuKW+8R29tZSyeYjumGDOuC3Hf9DznvXmcFpqfxT1u4s9MnEGlwnffalKcRWqdxyeWK5X/gIPSvz/AAuEdWTnN8sY6tv+uv3vY82nCVVqENWaejTW3iTVpfEmvJHF4R0NC05uF/d3VznCQg9zuwTjoR+NZXhdr7WvE97q+vo0Wr30nnsrfdCHhBGw4KAYAIJBxU19NF4zksdM0eJrXwZo5ZbCBjzdSDhp5D1Ytk4+uetbljoZ02yKKpe0z5gic4Ct/ejbrGTxyOD3HNezXq06NJ0tm1ZLsuz83vL5LodNecIR9hB7bvu/8jrr+d1hMQKBsfKoPCqO57etZhidLRpH3SWxOZI26Ef3h6MOoP4VZ021S4vjHJNHNHGqsZVB5yAcEeo747g+lb13ZotpkbZIwcbR34r46U/YSUepxpPc4HXtdNhp81tPLh4wG3g8SqRww9iP1rnNEkkHgu6uQpGoeJpzZROT92yjOZGHpubAzUfiTR7/AMTa3beHtMcC+u3KWbOQBzktG3oOpB7H61PI7TeLmtLaMtpmjwJptr5ZBBCf6xuv8T5P4V9fQpU6NDnju/e+7b75a/8AbrOml+7hKqvRfr+Ba0jwXZxPs+zxnC43FRRXXxSxx2v7uNk4xuK96K8GWJrzk3zM5dOp534qsZLy0naSIpgFjlgGj5zggAYOc9TWn8Qb/wD4Tn4daP4/tyF1jQyNM1iNT8zxZAV8n6hs/wC0fSpNSuxPayBV3Ow68ArjqO5H88isr4feIrbSPFNxpGpMraJ4ii/s+6VskK5BET/N9cH61+lwcqlK6jdw1S7r7S+a/Gx6OFlG7py2lp/kzldVgGp2G9Xznn5DgHjr6t2O49K8f16J7W9keCQ+SrYMh6A+nufavXh4Q1jwtf3ui6q01nHaTNDC20Ge+UZCeUO4IPLnhc9zxXLeKfB808XnNGqqMiO3iO5Yh6Z/iOOrHk4/CvbyzEU8PPkc04vb0/r7upVO9GThM57wv4m2z7JWIUjDO335B6E9l4+6OvevoLwZ4xtwlq6orKq5dI1A+XgN+hzjnoK+WLi1ks3P94HGa7PwP4mkiuIoZWZYywzgZOO/6ZrbO8ohjaftI9C61JS95H13qEkeoW8UkO5ZkO5CHwEPrk/5PfjrkaW8CXaJNGwixgKp481eoHoCCCB2+YDOKx/CWvedpyM7GUoq7F29uMc+vQZHc8VbuHjt73zmLtuUyqkbbCCqlgc9iD65+8w71+OxoypuVB/0zhRc8RWMUswxhNoJZlHXPufyrznWJ4bVGeTAdeOTwfQgd/17V6FqmhvdwCV5juJ6F2BwcnsR6jtXH6roiWU/yqN4Y75cMXVR2UknGeuRg4B5r38qqxSUZSuVvqchYm71GOS2up57WykbzPsseWklxnBCEgD/AHn/AABr2f4POnhnVBPPqE2l6CYW/wBFtovPSRtp2mQHBJyOX4IxwMCuE07RYbX94F2ljhiBlm57nqfwrstMsXNs6eYyAHO08DPGBtHfv+Q7V72KzGNuW149ioTcJqUNLHaeIPg74a8bzvq/h5Rp3iAjfPYyNiOYjrlB7/xDnpkV8+ePF1Dwvr8+kajBLbTBTKsUxyNvs38Q68g8/U17RP4li06Bbl7addRjA8t7R8M7dsHrnp7ZPoKw/F/jbR/iVpsGj+P9LSKVWYRa5ZKd8eTwsmO46bk4OT1wTXBgpyqVnVmrx7Xu1/h727fK59BiJ4LEU4xhZT72t955x8DGSfxR4kKcZsBkdvv10vwOE1pd3i+YgK3cq4Rd2P3hzlj8owPTJqbwP8JNQ+HOuajqK6jb6zol3Zlba8jf5mGc4YDj8RWV8H9R2alfRqGike7lKKWAOd7euTjr1wOayzWpDESxDovmjaH4JnDjIOnhqakurPpW0tNkDeeSXBwMNn0zyfoDxVW5sx5joELFsFscleCAD39CKdY3Ei2ayySKrYCgAEMRzx3PQ/pXPajrht0iaKQiUDBC88HlvqOhPcZ+tfnEYTnKyPMbSscB8RtMWCe4l2eSyk7VHJ49vTp16+1eL6rcK1pIJAqGQZzjKdyOvT8fTrXr/jLxRZXaSPI6R+XlmDMG3Z4GO2OM5HBwa8VtbC98d64WtM29hG+JL0j7q9cL/eJ//XX6zkVB0sO6lfRLq+nl5l0qbqy5Yo2vE7Jovw+8BaSCRJcTSX8qHgjJJHX6innx1baLDhp986EY345PYY9c/wA+1afxEtvC/iDXdKl1bXnsBYwCI2Fim6R04AACg44HtUiaz4d8KxRf8Ih4O82+O7/TtZOWA45AyWOcg9RSbp1aUOanKUpOTf2VrJv4n5W2TPRxNCLn+8mkkkh2g2mseNzJearO3hvw1boZZNUul2N5Y6hFPPIJGTxyevStG61uHxfbQeG/Ddo+leDoDkZ4mv2H/LWU9TnGcHk4BPYVy9xeeIfFuoCLxFqck1lcDyZbaNRHDCrHCvtHGVYK2Tk8GvVPBOhta2jLLCLW5gPkyIRyHBww6HIzkCvHx044SHtHa62Ufhj566yl57LotTgq1YU4clDru+v/AAxqeHNAjsrUEAhFGNgGBkckfQ8kfUjtWg/k312beMHeE3YQDaAe/wDPirU1sYIgGjHLbQG7n39Oav6fEp3TIv7x/lDMMZUcDPtgV8DWruTdR7nAo3KNjZw6Y2VAZIx8+SOhPB/POan8QTY04HKoT3Hc+p9D9K0pdKUxyYG0x4JYjnkZOR/T0xXmfjnXW0K0meRyqbfuk8r6fge1Th6bxVZRjrL8y3eCtYy/BVzNZ6/4s8VTPGw0DT3SHPBNxN8keO2Rk+9XvAPh6OLRolkCtKRlnbkknk8/U1yi6tHpXw00K3lBjuPFGpvqMpJzmCL5YwfxrutM1yBRCIQdg6hUPTt2r6vMo1IUlCK8v/AdP/Sub7zesuSMKT6K/wA3/wACxuyW3l28iJtQkbQR0zRVSXWQsAzC6hmxudcKKK+bhGouhz6HBm1nALpqMXJ3tm1nIYkHodvPXOfeuQ17wcJEknk1O2R1BP8AqLgFeSc/c4IwK9cn09WtVhMZcovlswAO7jAP5Y49sVzes2D31uV3M3l5BI7HPckAD6ntX6bhcw5Z+6rGqduhB8Sbm48YfDvw342sp1vL3RwbDVSgK7VOAXO7ng7Tn/aNZ9tp/wDa2mJ5z7d/DSYOAD2H8RGe3HTpVz4ZXNpo3iXUvDOqypLo3iSE2zIVOxZsfISTgcgleOM4rnNEuH8CeIb3wzqpma6s5fKt2IIeSIn5WU8/eB6DvnntUYilKmnCh9n3o6a8req/7dk38mjsxP7yEcRHfZ+pz3iXwRHyGi8tdxAcD8hgfTgCud0jwnNY3QI3IBkGRO3Yj364JH0r3qOAaiESRljCjGAM7MdUGOrepHTpnOcTt4JRoBNDAqwspVSTkKen44746/Wrp5/Uo0/ZVNznjVlaxyvhiafTJIgrB4VTa6lfvZxtGc9MZ9+Peu1Yyahc29vAFdnJXYoAxlG68cY49utZv2BrCExviMgH5GXBJ7Ag98Y49+lc6+oMD9n2hvOyzkE5KA4A9gSGOPQLzgnPguCxVV1F0M+tztD4ogubLZEm1wiooPVW44Pft0qN7d5riHzFJYLlnwBnA9OR39z+tcZcatBaEyQt5DDttycj6/qOB0xg1Y03xTIt3EZJA25c/K2Vb/dPQ/zGeaqGBqU489Jf5hZ2N42JS6LNGQoyqFTzn65yBz0/DtXQWVykeFdCgAABaP5T6A8cnGeB1qn4eFvqsbyNGhDBcFjwQOjE++cn6n0roDokIjVk5KHzgFODkDk46Z98VzVq6b5J3utPIaGLpiyyGWUF1YFWUH5gD2HYdeg9evrm+JNFgaxb5QkAUlccEkDp15/DHXriunawuSpOWfIAYK4H0AOOnIqlrmlvJZHfL95vkG9hz+BHtxXDTrtTi+bYGtDz/wCHGvN/wg3ifTHcs9pd7ol3fdVkPQdAMqeleZfDzWLiz169YMQ32xsgjJPz9z269cjr0711WgbdJ8R+KtOUnMlqsgxISG2k+pOOvrXidh4gOjahqnmHA80s2ffFfo1DArESxDpq/Oov70e1V/e4Kmu1z6lj+Ji2+mHzpTuwAqORtUkcH9T+A5rzjxb8X7m9uI7O0SRrliFSONSXYZI49xxz3FcBpmkeIvG+1j5llp27d50oO5h6qvvwcnjNdpYanpXhGC6u4EOpasihHmJBdOxdj/CB7VnhckwmGqar2k+y2XqzihhGlzVHZE1p4bN9YTaj4tuVs7Qcrbxybc7fvFj6Medo79643xt8WhLZyaZ4aT7FbRjHnqu0snfYO3r+dZXiW51fxQ4mvZJGhHMcKjCKB6D175rjLiF4ZjkYIr63D4GE5KddqTW0V8K+XU7oVIQjy0tPzO1+HEKyXqytmaaR8l2OSTkc5Pfr1r3y406JbeFyoiKAFiBnHYken8FfNPgnVF03V4wXYRHpjrj0r3zSvEls6RtuIAA5xkbh27elfI8SUaqrqcdrHjYmL57msmlW5ikZ0YIcgLjI24/nzipbfxOltqaLDcurbY2kztXdKFXdjIOeR375pkuqutozyPGtu53BkJHygZI79cfrXi2u+JbmPxFF5isG3E8n5hk9K+awOAnmLnFmFOm53PqDS9WbWuXjaZ1JLKZMZ9xgA5+voK6TTJt2yGQDao3JIDgSr/THcdvyriPhff77KNXTer4OVHOAMHJ/z1rrNWjSO6INyIRKwaJt2EWXp83oGGFz2IB5xXw+IppV5ULWtt6mkU92a+rXghtmlXG0/eBOOB/P69q8Y8VR/wDCc+LNH8P2oDvfXKxMrDOI+rk+23PtXW6x4txpEyudlwmY5InwCpBIIPv1ri/CmonRPC3iLxoyf8TC/b+x9ELjLIzcSyKfYZH4V6mVYSdJuq9JLRer2+7f0RpSiq1VX2Wr+Ra1SGDxR42uV0t2ttC0YjTrCKJyFWOPhj+LZ/Kumh0Q/aE2TySQAZ+diaoeD/DAsbK3aIu+4Dfu/qa6G9ka0kZI8sRjLHpWWMxPtKvJTei0X9dzCpOVWTnLqZd5a7pFUljEGJCDofeiriokzs28ZHyj5uKK5PaNaGXLcis5FlieS4j/AHg5I5A/HkdwaytQUOTHMGYYwrNxnvkL2/LvST6g6XM0BVzHgtHJjPA7fUcZ9cA8CqVzdC4ynnSBt24PCoc9OmchfyJNfY06U+a/Q3OM8W2D3DtKWZZ4gHWUdmBzkHrngen1rZ8ZOfiD4Bj8eafGg8TaMPs2oKudzIv3ioHOWB3A54+YA81HeW8V4xZ4pZf4T5lxjOfZV4x9e1J4U8QReAvEDGeGL+xb8C3v1VWYqv8ADJlmP3STkccZr6GznSioa1Iapd11j/28vxsduFqRi3Tm/dl/Vyn4E1430cUp2PGRlAF3Aj0A6EAZ9gepr1i1vWt4oR5YkRDvIzz16EnvyTx/jXi2vaT/AMKq8e3Fs7k6NeZuLKRBiMJ18sMBxt6j2IwO9dbZeN4UtpJifIjIJIkJJAPVj19u56+pIr53MMI6klVoRvCS0/y9Vszlq05UJuD6Gr4zuEnaRCrrBGgnmaF8MUBACg54LMygEdz7Vwlzb3Cym5mRAXCZSBSETaAoVPoAO/OPXk9Gswke3RwztK32y4VzkoMHyEII64LOR6uvpW5NaWepWwhB24A3rkD6fpj/ACaqnV+oxjSauuottDxTXmlWVyrsB/F1z37du3vVLRvEMVvIVlw6MCHjboQQRx2BGeDxXWeIdD8u4mMcnmq/LN/9c+o546c5rz3VNMa1laaI5kyFGDnk9/wwT+Vff4KVLEU1FnVCz0PavCmrXFj9nN4QtvkbLhcFHPYAgnaehKnBHIxXsOnzQTYjRh5iruYsSA/+f/Za+W/h/qz2EzKHMRIwV/hf/eU5DenI717BYau8ssYtUSC4bANqGPlXB9ImYnY/J+RiVbHBB4r4/Nss/eP2e5m0k9D04Si3uVzJujkUqUc8Z/z275NUdbvI44LgSxjLIcBT05/Cuf0zxJBrDv8AwPGvlyJINrqc4ClT0OeoPpVrU7h1t23sSqD5XQZPtn1/nXxzoyhNRktfxM2zxvTmx8WDAyOkVzaSp8y9eN3B79Km0/4beGvDdw3iLVk82VhvVJvmVCPlG1P4mPYVUSXHxX0iUBlSQvHkjAJKH/PWt/Xbtry+0qxKK7Lex/u5FJ3Abj2NfdY2daMaUacnFSguazs7K59BhpqGClUau47XC8sta8cLHFZW0uj6YW+ZE5uJ146kfdx3Udu9dvov7P8Ab6fYQKytHtUSfKMjdjk8jnPGQeK9a+HekWsYjZoFRiPnzkYwBjB4/XB4FdTrtxHp0bBAmxm/1ZGOB0+n4V8v/bFdUvZ0fcj2X9ankNzr/vKkj5K8ZfD7+zlMEcAZGGdinIjXJ5Xj7vfB5H8vN7/4byXEhMaBQUzjsfTFfSeq3cGrahsCB1ViPLLY2nt3/wA9Ks6f4LL2rOIlQyH5VULjjr+mOPeuqjxDXwy1epyKTi/dPijXvCc+gTq4BZvywa0tI8Ym38lZQMqeh4Ir3r4m/DiMJKTGxHVf69f/AKwrwPVvAtzFGZY424z82OT7H/PrX6Dl+a4bNqKVd6nXGcaitPc7e58ZLdaYpYkxqVQEdASf8ARXL3NvHrPiCGSN9yZGWPauRlvXsdySrn+Fh6j0rW8H3kk+oLEHJbPyle49a7Y5dDBU5VKOmj/EpUuRNo+sPhpaRHSolUjeF68jB/ya6LXo1vbaSJzGyhNhkx07f5/Gsb4buINPBlAUNH1Hcn1/X8qt+I5vItJpUmCFV5B/i/z69a/A8ReeLlrrc4JNWPH/ABpbat4mvfsOiq97rTr5MtqnLXIHSVPVgAA46nGa6m/0ZbjWdH0CzBNh4XgW3kdH4kumAMrYxzg8Z+tUPhtcvpmt+J/HFyjeTodkY7UEcSXMowNp7nGf++q6j4X6TLFpv2m53SX1wxlmLA5LMck/ma+sx1eWGoKOnuq3/b0lr90dP+3jpl+7w6X2p7+i/wA3+R1Nk728CIpUKONxXHNQapbyiEkIJdxwpPQj1rZuoo8CPGEHJA6mqmp3ywWckYVVwvrXw9N8z5kjhkraM51ZorWARsMHufeiuT1/W5nuWtrCJrm7cDbCoz+PsKK+hpYCVSPO2lfu0vzFGM5q8UZuqeKlvLOa3juN1sZF3iNsh5FOAR7Lnao6Hk1Rj8QIkuyZzwvyqTgN249vb1rx2x8VNEFXeAANuD/n/OalbxE7h2aTBbO3vg+or9fWScq5eh3uiz1K51+ONW2uFgGDy20EdOe5P0rA1fxJHf27RH942cYfgEeyj+teevq7nJfMkmMZPPFQreTOQQQid8tgV6FHLIwab3Rao9T1yLWU+IvgmbwxeSkaxpiiXTp+jMi9APden+6favOdB8UPpRc6pGC9uxjW0lbImlB6MP8AnmDyfU4HeqMF/LYXUN3DdGO4hYOjQgkgj3OKs+PrEeKLWPxJpsZDD5LmAdY364+h6g/hWkcDTozcWvcm7+kv8pfgz0ElWioy3X5HYaJ44e8uHLTySTSOZXdz99zyW/z07dK1r3xe8UztFIgMgGApwAO2Rjr19OMda8GsNRmAGGOO1dTpOpsuGdjIpOSpPWuevk9KM+dI45UEnc9MfxfBJbNE5yGzuWTnnnv3rmtUu4m8vBJkQuWXGODjBJ7kYOR2BFZLO10ZphkEH5QwzuYngfXgn6D3qMwSGMbQSRzjq31qKODp0HeOlyVBIv2N6tvJnGVBBGPY/rXomjat/aFsI8HDclPb1z6Z/M/jXl0FjMuGCMFc8Ljgdx+fp7Gur0fzrVkkKnK8FQcE/wD16yx1GE43T1JnFHr5vRqsC/2tcSrJCgWLVVXdLGf7syjmaPr/ALQ7Ejiq19r97oLGy1iNYnuE82CaOTfBdJnh436MvHQ8joQKo6LdvPGyMpKkE7cdf8Pr7flo3llJbaXLZy2o1fRJDuk0643LhyceZC//ACykGeCODwCDk18RKFKcuSvv3/r+vTcx0lpP7/8AM84W/E/xJ0fy1G4XCqCgAJGD2FbesXptPH9qgG4LdKdpB5xu9KzNP8FyW/jTTL3Q7ttb01bpWeKUhLy0APSWP+IAH7y5H0ql49W5ufHTPaiAeSyyvJcyiOONckbmJ7DI9T6A171elTqShTi9ORr8fwPZpRf1OpA+uvB+spb6DI+1TIcAMBxj655+vfFYPifxnDdRvFHdsZ2XCY6Ajt1rxaLxQZ7aRBq2o3QVQpksokgiLY6LvLO3PcgZ9BWRb6pi6UibUcbtoWSSHnJ5ywH67a+Ep5RPW8lp0PFTko2PXfC9idRuhLKHk2scjd2zjH0z/OvWYoRa2qROFcqpIUsePWvKfCFpcw2sbxNtRhuKtc7iBnOASnr6110muC8jJkeOJQrBQzsz5zjlgQMcZ4Ar5zGRc6jSlovUmLUTn/Fzw3khEwLxJksobAbB+7keuQO9cM3gR7qKTKrs2lsqep6nPHf+lM8d+Jl07UXjt5YxGMPuIwWYH+8SeoPTjnFdD4M8UwatarhtjdGAOfzHb/PHSvSUMRhcPGrT2ZnZ7nz144+HyxGTyo/LIyxLHNcn4W02eDUIYVBE4b/RyTgM2f8AVk9s9vQ/Wvr7xr4bgFuJfs4eKdSxKoMjjr7e/wD+uvE77weGvRGF2xKfkwOevQH8q+6yviP22HdKsdUarS5ZHqnw+1Y6joEbbY0kK4K4+ZWHUEfhjFUviZNPYaeWQi4UKeF4IHtn09DWJperSaUX1YgFoMf2hCgACk8LcAeh6Pjo3PRqbdanB8QPEmi6JDOwS9ulWVccBAdzHH0Br5H6m4Yz2yX7vV+i3f3I5+RzkoLrsSazp9zo3w+8F+EmSRLrUpX1nUEc8jJygYHHqvHtXo/huH7FBCoOAF6YxmubOqReJfiTrN+37y3tSLKAk8KsYwf1JrtDPFHAihQhGMEdCK8zM8ROoo05KzfvP1lr+Gi+RtimpVmltHRfItuVWIySZGEyCR056V5p4u8SuZ1tLaN5764IjijTksfSt/xp4wTSoRFkTzSfKqJ95mPQAetYcOm3HhWMtcxLJ4su1yHJyNNhYdP98j8qrA4aMbVai06ef/AXU5FH2jbfwrf/AC9SsLJvCkclpaTibXLpcX94ORAD/wAskPr6mitSx0xLPTUGAzjJLE8se5NFdMsW3J8oTqSk9NF0R8cSWz8tgkD071FukcFiTle1djrHhm88NazJo2oxhZY+UkUfLMh6OvqD+lNm8OKybo+V/vD/AD/niv6Hji6bSd9Hsz3JT5XaRzEMzYOVDYHG7sf89qsW8gkceYST0HtVq/0nyX8tF5Xhv97v+XSqZhaHJIx71unGa0HdSNy3gheMBxnjgDk/5+taej6gfD140xgWaxmTy7i3JzvTPr2I6iuThuHjc88n14q+upkgCR047/e/lXNOi5JxeqZmlKLuiX4geEV8P3UWrae/2jR70B45FGAM/wAvQ+hrPsFHlgxqWJ9BnPOMCuy8GeILCW2n0DUm3aZeN+7kmA2wSHvjsp6H865690W48Aa1Lb3edu4paSHBAyOWPuAcD657VxxqThfD1PiWz/mX+a6/edNT3488fmXrW223KQbsrDnc0Yz85+99cY2/8BNbViFLBjjAXBHrxk9avaJptpdWCxRsFJGFUHkn0/8A10+50iSNpDFhsDaWByB/u/4/XHv4s8TGc3F6HmOabLejpbP5gmAB68diPT/OT+Jroo9MUou9RHlc+aBkY65BxjmuFWSVZ8FcnJ25PB/z6+1bOg+Jvsk0sUwx95coe+TXBiKFSUXKDuQ4s7HTMQuAznAJw4bkjt+VdPHqkrqYiEZivygAA9+hzz/9evOZtTRlkm83a8gGZExtz6FR79xg/WpV8WmyMUN4giwCY2RwUcD+64yD+HI714NfAVK3vJXJcXug1ppNJ8ZaTcxSCKQXKHcV6jdjrnjgmuC+Ld+0PiliCfvocDvjBrU17XUvtUs8SZEdwjLn/eH4j9a5n4ygy+JCiYO/DdRgYOK+twOHcZ0lU35X+h6+FX+zzi/IbZ+Lro2/lrKWDnJzzj346VraPr08UsRlGUAxkccf5NVvB3gS41UxkZZH/jOFB+mQT+gr04fCC4XT/MyCPuqAd2fr0/KuPG43LsNJ0pNXZ5snBaI2NC+ISJEiicLui58tR3HOc1tT+JY9Q0uSKGV1YM37tWzgZ7fSvNovhpfwyGRN5ijcfNyCPoK7HSvB8lsN0kZaRT5oLDKkAE/59a+FxdDARfNRnd+hzSSWx5p4xa7lk81p3fZ68nnt+X862Phx4juI5IgqkTAYjUEkOOoX69cfl6V3HiTwDLPbkgrKXIdlbq7ZyfzrhDpFzpkrAqIfKcAqvDjn27/yr2aWNw2NwjoWRopJxsz3+z1yPW9I3bhOhAIxxx3z6D2964XUYI7W4ZP9ZHncVUj5f8+lYFn4pmhtXlikLToN80aKMzKOrjH8Y7juOeoOcS48cPLc7yFXeMkA8Y/yK+ZoZTWhOXs1eJk02dTd3H2a1F3byx21xESqmVeoP3lYH7ykcEHOazvA+h2Ok2XiD4iWMpsotIhltRpzHesU7pndE+c7ME8HkZrntY8XRLZMqyb5JAQkZ4JPp6HtXrGvDS/hf8FbDQb+wiv9S1UGS6s/uGeaQZYNjoEXA49K9F+1wtFUWnerJRt3j9rfpbr0vvuejl1N80qktIxV/n0PH/A/xBh0zToEvJl8ybMrO5AO5jk9/WvS/Cev6143nePRNMmvGAx57ApCmO5Y8VwVrq9vZ/Z4tN8D6Pazk4Ek5MhGPrXeRTeK9btoLe81H7NYYO+zsU8lG6dccmt8wpYVzdaUFFu71kn9yjf80cNSNCLu5N37f8E22gsfBV1NcTXcHiDxouDFEg3W2n5ON5PRnGat6ZYPHA9zeM11cytullc8ux6ms2z0WPT2URKqqSQxx610drfRpbESlcDnrwMd6+Qxdfniow2/r7l5GDn7S0UrJbL+t2UdTnRWBiQEAdPSiqfi/wARad4d0Z72aRUDLlf9qiunBZdisXT56NJyS0IcZN6I8et5bHxhpsei6w4hli403Un5Ns5/gb1Q8D2rDtob/SL+ax1a3e1voGMaRuvDHu6noVAOcjuQO1cjYeIFA2u/yntmvTNG1K2+JelQaBqF0sOtWyn+ydSYn/v0/qDjj/6wr9yxeGlQi6iXu9fL+8v/AG5fNa3v60E5pU579H+n+Rnz+HYjbKYwWU9ATyPx965fXNCjjJEZygUHI/U/n0rfstSvtPv5dH1aJ7S8RijqwICgcbh6g9j/AFrSuvs2oRiONPlRTkgnP6/jxXnUq9XDyXM7rv0sYpypytI8cvbOS1kVgCQfWkD7gDwvrmuy1fRA75VSvyrgAcHjNc7LpTEkgDGK+ppYiNRHdGaZRjG0nBLfWu9tLpfH/hw6ReOTq1ombWXPzTIvRc/3l7eoriTbGE4f8do6Ulvez2d3HPbuYJY2DI4PIP1p16Ma8VZ6rVPs/wCtzWEuV3Rq+H/FUuiM2n3fEqHa7EZDD0+nH9Old/ZeLbW8RR91ifmJOT7j689/8K888Z2y+IbFddtECXS4F3GnQN/eHsf51y+n6nIHXMhRRyWHUD/GvNq5fTxa52rS6+plVw8W+aJ69fzJMQEYES5Cn/ZHUfj0/OsjU4xGhZSV2g//AKv8+9c7ZeImc5cYA4UddoHQf596vXesLcKFJwSOuegrGGFnSaj0MFBxdixb+Imij8qRmZc8gdfrTH13AePYs9s7Bmt2JAPuMcqR6jmudlcsxIGB6jvURuHUfMD9T0r0FhoXukaqCNk28txewyWTteRq4YQt/ro+e4/iHuPxFWfiq7HxFA5J5cfd6/ernLa92XUbozIyuGDKenNbXxTud2pRSg5+YtknrzRKm1Xp+j/Q7aS9yaPoL4LWVteQRL9leRkVWI3AAfUL/U17u2nQQWDqH+yhzuMSDBB/p+ea+XvhD8QItMgt4MPJcNtVLaAbmlbPQKK9pfxdNqswWeQB2+VrO3cZA775eiE4xtUMeeor8FzvBYl4ybatG+7PAs4t3Ra1y4s7EIEy3nZYxrySeegFcx/wkn2MzxuA0sZAADbl4IOGPrjjAzjPPpWjc6abyyD7o4oHLb4I8+X7A8lm/wCBE1ysNh5oeNYifJydyDj8vxrkoQopNN3YrXOjuvG8EsLFtqzLn5dwz7c14rrPi8wX7q2WjdskcEk9xnv2/Wk8W3Eti0zR7gg4bBHToP8APpXl11qbTXQGSZM8gniv0HJcjpWdXdP8DenS5tT2PTrxZ445oX/fJtMTg4weoP1Fcz4qgNt/xMrdRHFJJ5U8Y+7DKQTkD+64yR6HIq74FaZEV5Iy8ePu5/zzW14surOGFo2RZrWeLyLiEDEhBPBH+0rcqfb3qoT+qY32KV0yV7suXoct8K7I+JviBbtdJ5tjpZ+2XDOBtbb9xSPQtj8q6DxJ46PjrxjeXskm63tCbW3Vj0wfnb2yeOewqjq+jXHwe8IT6O88cmv6xLmSaI8pFj5foQvJ9zXKS3axxW6M3mSBQFuAP3i+zf3l+vIrveHp4+s8VDWNuWD8vtS+b09EeniF7OiqC3er/Q9m8A6Supaik0qiSNMEE9PrxXqtzHbwxq0blcHqRwB0rzv4QFpIEW4UI5AKgcqw9Qe4rvtdG2QRqMqR27V+U5pKTxjpN7Hz8k1dsxNW1OCBpOT8gDcDjNcbe+K7cJcfaZdkBBLBW7exrY8S/wCj6fOwO1QM46ljXzZ468RSvNJbxsVVjk819NkOULMZWvZLqXRpuctC18RviFP4rvVtonZdOtxtjQnkgetFcCXIUH+9RX7hhcJSwlJUaKtFHuRgoKyO6ia15b+zrVmxnlTj+da+l+LLyz2PYw2ljtOQ8Nuu8Y75OeaKKurTi1qjlcpW3O+s/EMHxVFro/iGAnVT8tprFqAsqH/bHQj/ADiuC1n7b4H1+50eeZLp1wwlQYDL2yD0PFFFfMRpQp4uWHirQ5b26Xv07ei0OiP72g5T1adiBNWe5uMnLAqpww4HyjNXYLFdQLv935STnv3/AKUUVvVXIrx0OV6bDLjRY5EZsAevNcrqunLaSkZ+bGeKKK3wlSTlZs0ptkWi6v8A2bd5ZPMt5V8uWI/xqev41j+MNIXw9rMkUTboWIYA9cEZGaKK9ZaV426p3+Vj0YawZWtpiU+vcmr8UhMQDEnP8qKK1kjJkijg49aVnIQNxjmiisiSpHIpmBIKnP3l/wAK2fiSfNa3bplF5/Ciipl/Fh8zppbSF8H+JJNP2Q2qGESDbLKpxLMvdS/UL/sjHvmvc/BviqWG1t440CxkFkwACuOv/wCqiiviuI6FOULuJ5OISudlpHic3MGxkP8ArGUtweOOQPxro57WOOIZXMrp8xzx04/IGiivyPFwVOaUdLtnCzxf4hxBoriQAKrMW2gYA7AD04xXi9qF+3FyoIRhnIzkZoor9g4f/wBzkd9D4Wz1vw9rLadaGRE2wKA2xTznoOa0PClpaeL/AIhwi6jJtNNhfUGizjzChG1fpuIJ9cUUV87ioKn7erDSSi9fuDDRUsRFPucR8QtYm8WeKdTvpiR9lkMMeTyMdT+JrndBna41ONXwSTtA7UUV9lh4RhhOSKslFW+43rNynNvufT/gfTf7P0yB1clWXdtB4U+orY1K6ngM5mYM0fPy9KKK/CKr9pXk5a6/qeLueeePvEH/ABLGfa3IOfevl/Vbpr3UJZG6s5oor9l4Qpxjh5NLqd+CS1ZVdt02AMAcUUUV9+3Y9M//2Q=="; + } + + 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 298/336] [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 299/336] [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 300/336] [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 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
      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 301/336] [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 302/336] [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 303/336] [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 304/336] [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 zcmZ8lbx<6Rj^4%Hio3hJODUA46laUOYth9Qr&y6i3$##NibHWJMYgz8SfG>^cUye# z_ujjkxx4(6$s{wGN#;xPWuy-n(GP6+fQ{ih4)%wA#AbjV>68dlqr%~j#HAagc$r_N z36s;s^z7#6Qp=xvrznGXJcn=kHVh=oKjw`6URyT3lRv8O+wqSdIVhL>n0wga?1aO# zJZkO1qPea(K0S4SAV{C#Tgh&r6v!`jS}fTrIoTk3^IUNq|I8VnygD_lUnSU9+iTnu zca8noPQV$;%R*Oe&BIjN3ro&^%n(_a&$e6bUC>?sO!%B1IY44GgrA*Y>ug*j$(*rZ z2z(5OcZEN9OAPx(%gYo$$^T*w_+6pCBbZSoeTMuDuFA*WQ$KJh!8vUDZ7H6q&E{=+ zzVg*xbsUxc*^Nf$xKDRB0tq`L z=QfAVa4};z=B$P)MA9{eEK!OMLxj@vSM87gly7n7?ZpB`V3^ty>{?VVY2#vK<5mMs zv#Izh*sX|_>SCu+^g+d{$=%>tYdOZiTlKA>^>8f(l%!VY8;|#O`*f4w$NV>!v&I|e zZR9mHqHLqdJH#~$m7RafOrs1e0@E7PAFZJeHn^dUbXc8^r6oZV(_``+?5rl%!Ipn= z8RJ+6eBEW){pK)UvTJ0dr(V6EURH=$mZm$RKC8)wFc|3Gl^Dv=2xc_)s(s8fUbTOX zjc-atVyBQY^RD6OMKHEm&75UQvxo)}Mxzr~BtuYn&s*H@*f?3H1XgXtS-DC_pa-4$#>Zg z;e`9-U`Xc+X*{We^R2=fu~gmUCn{;#A7}u3-V6sK8=8=Bu58Qd`>J9|Ld}hVk`<`7 zGrZdRpC9ut@)e{er>5$rh7mUwIWO&cfxg~^rDw*F>`I2~J(#qp}k+z8(~W-gg$1e%Jrd#_>fBUq&X1^{W(< z()jgr&jl=HGYw}WZAnvz!HAwaI-yb9Zqbm{Klp%FpXt>xEP#s2K(4MMkhNtOZZCL( zaF!kQ=W6NbSnDn<)37Lw$}06o*Fib|atU{Wx?-QM15Pb*23BzQ_MLOlch}`hn>9Sp z8;Lu`Ko*BZmEWr)I&TH-w(EH%3P8m#$~@TRxF(ja#khRAyVB|&Q@;fkvu)-f>29LV zH@KkiBtd=@CS~_CN-OKIu0MVwV+9Y|Yy9|#uA$P?M|(2Pq%M#i`KG<1PEUKg6=JI7 zkhmi+iyqPraR62N=m*X@{NnuHk(c-EvT)F{ht}*v-Nz!Va$rs1_u0?)1X;b&os)1h zuDfSlWVWkLioa;7lKfgQ4{qi+d#$)A!lR(yc;+5x7`<(@!Oz`hE{%Qp#I=p|AEFjV zMHfN_6t0ebKl@YauvbA-juLMhM-TQ9EVoRZ!phmERM4!6Nj!FaR6A4xT6qP}6f@XD z?zdzFQt@>OPB1?-myCv8;Dw}U&5wTfs@Z%D8?n?IJFE;Z%?<3grWXb|hv*%qo>+=93x9n4UV`iwp}V7Men-5;41E$vj6cbb zx$B*0Xk#j`3CmQryg9~1xJ|<&jnXqhD)Bq8SB|`|i0!h+rh43uWt`cN))kQ49x4WX zQ)2((E9HBPM{1bCDccCFqtKK{l)(DB{5o@1)q-1rx=Vr6`{?>Aj?%YrL`=~`&{M8L zP+nI;1zY~Gi-5H2_xi+3Xm#1xo$hSp5V~W33d6q&VL% zO1O6faaGjN7*ew$`0@1eY5n=n;#p6fsl!5MqSM$PM3UYK$GPJ@P&E(Dm14nChU74P z^kwEYIf;8G7J@SoNZ9rI@>(9V|IPc)crb6k6H-vmlI;icOMjxmcphZQ*IofveTd?d zndW(M2sT|$%SkZ9c9KTd;pIBsP8gBawm!O~?~eb11v`7=&$*sK+Fu8prsyRW(gR=K zh7|03l5Qn0|Z(R_G-cz4va*eLRR$Q4FwBSEpe$ zadNk|RCmaJDq$ap@H?>AZ0~_r`54Bly#H}=NiaRDIx0PQqB_DWZF%TP0J#9{eX7}1 z;d%v4UX#h}EHh;8geQ2 zEuB98}qUEWOFiZziU{>YM?j)%_r9!iS-F(S!RRTS&P*VSk|<$c)Z`_WG_zb>|z zpr}WrQhndk?ZFg^xH(5u3n03gs^$k#8(-N9Ed(8IkOyz03s zO%f(F4Q0Nm+a()oB?PH4yi7uKfy}h`_s)_z_zos1>sKLcQDO0!c6>*y9(K$^oHDeG zljAafq(fHm-yc^=YQgD8s7Tcf!PSmF`CC&5qPaHq{OJ;#nzQsL(5eBiq@{XMJ7mH7 zF?TBtb1D36awUK?u6#vLWjxlkDn=+}HpAaX*s^AWbKz?in8dwi5e<2 zw6fn*l-c@aWWUYV$wkjELX=diZ|-6rDO*|aRfBc+m$#bqs`EC2mX&&gc>6nz{3^E6 zK+*Lib*D5@bmZ&g3p>LEd;ozO)}=|c11`Q_Zaq?fUP#3Sik^(TPe6iUVFjfngvCk? zqmr6SMTZ6oj9O~LE_N)s6K!%*rVHOr)J^aYsZ1tD!Juyzyy&CeXnTg47iJYtefck! z!=mlEG;KDPWa2{pB%TV#z95edD zXX&_PVER^JsOd+7T|1cCWMx(7$G4IrQ$q7Jp${!?P~m@;YAY4ZGHNf`Vd5!{I%Lp% z4w(Pbh4W;w+CI9=jeWZ0$xjL))BSdTC-dhKX8D%`{U-*QAK2%$E~>JgOCzZ=iW5rH zAN*Nmf**&Dv#v<~vAqx_lsXomqIM}POIvEa3X}JJ7D5~2Z=0{S9oP{)UWszPz=(0~Zg@ z8P?OaRQDFn%Pjii?hm};5JKsyb$>1`3j$@V=racMHm05Wy1{?p zV)d=M=Ua#IkP{~^^X+O9pGWWOt4)LJi^CUmocLf~xYA^R`BbcDEUMUtzZ?`q`d zaPCo`wvK=ACdC{Kp-2P0d3ubWOT?9tgB!6C?mq75FgbFikoQT19xFaxZpHt+&7<6L z+77i8{W7IJar=`e{4LW-*|KMc3FRvn$prB6x;8TW=u2zNv8LEhd>V!CzFTf+}@ zD1$W(ltGm->D#6qWhYDC*VOu70>h%RV&&9aY8E8dR6I%Bk1jkM-pTNgyXM+zBSr#=-CdCCOiNua)vN(l8%-4MxwRr^gwi;nWU+#PJwtUIE)ChTJ8)Mv-kGOr`&i1G`0LJhPqUgB>fB>bu1rm z=3`vDUey|9wj zck909&}gZE*?JN!Q_<7?T~xX>?l)Yi!-GNPV7NHyG&MKOGjkalJtO;@Q10k*ej2VY zWDaV#b7o53ro#`l%d!3;{#1x})d0UWU3g)Og}B&-T8CnAss4>z(#qt!+FvES?c4O% zM_ggR=cN&?uPs#5$^OhhX43V@U4o8Ml-{v=g-*<*k6DkXmCBrJVO&aL&3?u!-aI@~ z2kmij=i7D_mrV+HESezcps}X_%z>M`3yzi+kIQ=^29G%Mbm*W}uN!YhAH6XC^!au| zQQRez{+OBen47p&v1N3*|9IKyBK7)N9Bd>5}f|HpJMD2-%^ih+(XJ zb(DV7P12KTjz}N1c%wgF{U^1_X8PKtx3+80rE)>^3m*<3g9x$f+4C1@4Q{wj-k=>K zijd#^aWvFRdv3z6bmhijK6B3U+uV}TRnNzpqQulOcLg=nIHXAGYti4{ioQ}mjILL1 z<^P5C%#q4!YcMkbO!S4|GsGk*IgZIcbuf*vKvV)P3#_Vx% zsDzb98!t;&MK-hgA$|`Adp|0UBCvuj_}X0HwqbQPkJ|DU9hbCe#?MQ!RPdc9hRb0A zN0LnpqxxPj`viJ*19?O$+|Wn=q_RKtAdD?A;sR~nwt5m<6m3Yla#V%znS*r;4(2-g zzOtA_B_z-m??hRZt3Rr;IBi2`2bvqrsiWsF$Uye{P;EgcujhqDHr{|xHh(nD8U3PB z=-FB6e!KQs?Gtu$hH4-Xs0zbZs{le_&1!Fe6wUbRU^L(Y%vJ-8rUdvmQ=8P##>A|# zB{ju?v1qeFS0%~2sdk|xey+sk>0}_#@JeJa4)rLd8pL-uoo|MZHG@0N&z5ZzD&)fV zzNagmRcaqpkcV{qc&tP}%yPrplJ066ze^MsnQOWL-*aFH54L5-N4LA3KT~;a%fJ|m ztK=SzI$A&9QNcLAwqLaII_gejox8UEv#mX0>*ECt&`d>izI-IhGr?cav&4}j(j#C= zQ5UQ@O>UrFMWKuOJO(L6gHy!5o|_QOGU^!H2)ET7jg_{%X(b|-mEQe>eWTI`WOAs< z(vu6>>1S4z}ftA(y zoy8(54i5^+l1O!zd*==ceEn{2nOFyZYCk9y>Nm-p##q})``<>`VGyr`|Ez5Mq&bIa zREt(gcq(%*m~ae_(nU)JoI}`;bN9@i*>m`^ik2 z8*NOY=oAhn&j3gNvbRH!NhI$WEt;4HuCI+TS=Y4t!LL-kWlMif-MP097ja_YsdFc% zLuv9hxT=%D?F<}Y9_mq%A1W5&LFrIs+LFZH^$d@%h3-O60*s2Cej5P^>vrFll8tDo zWZ*2yGIsA9t5mdEuy8qD3Z6wF5-t4q%r2S{+B!YPihaIs&4bI0rTMJ_ECAuze>nC#r7x*w(@=^c6 z#Tz{~AV!Hq?4RaveQqH1)u1qW>;@)E6&{k$xr)H?z~&9{VK&waO@gn1J?7Hv1MZRK zM_@VX=ZrqS+PwuKpeA`khg0-n%2rL%1Y7b5vR3|iNwxZ0Uh|@U**bP1H%uPcD7CS} zYfjP+2`l~0RT9*1A_(O{CY*kW0h2CqjTCZ~?J3==LEZ-WiE>b@4+4wkp%((yv?Gvq zv=I&n{nvh7;un6;HAR@O)-xHD@d!8!iwcI=S#PEe`VFu5W3_2yYQ8bFp6roB#M4IsNrGKh3SzRksr*#>L$euXv`u}^65{3wTg`+PKiW(t#~zH?Ikbbk)9@B2?_QHCa1|9PF7n??TbFVT(}7^nwR zH0PxI|CH+=*7e`A4uhIA)Bo!nbjJe#1jGOU^8a!DTbnDw6cs69v1TN&O>KEJpcE7XWn`4m;2$)oI7{s&Y5#gNEfKT6I7Eygpc&^x<+LaF#%@U^8(awKG$O@ zE~R?3Ru>dxH76WZLMR0M6u8|>6seTsUNDckosd}HFxZ6wkG&6Jc&S1c5 z*@G|XtR5kWy`Ri!^8C|sK2P6+%NZ4$=+~%;28Ct&N5#c|1>okYr+!a2@(FM>#bnhh z=X=~+g9eKpfY+@??nYkfBi(E^!S?Hc*-M6?w$*GL)8WkB~vHH~iHxO63^B8m}N;?YK`darf1A4?k)CHLY+NHF04#WGlDM%BGb&whogs9)w_7 zb%H;g<>6K`M2O3cjPYkZO(v+xD8I**ZG1;25?T@Vv7-7!q~Oet?Rz+@PbsX;Xkh#9 zUL~)e%z#$tHwX}jD~I%{9iD#BoapDPSw-b>F85OW;5K1yY=PY6b7VG?a;UwH8;#>s+jw6#ekgI*2Pw)*$*(rMXW03meOxLw0v+Pqz?Vy zK$v=6>vWAD2~DS*FHHQXrK*Ac*`cVex_p;mD0`T9m97q;8T_7?;#e zX%CCTje`@ykD>�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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 305/336] [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 306/336] [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 307/336] [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 308/336] [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 zcmYIuWmsHI%r>sYtw3=Wid&1jyStR)wz%s7id%7aFJ9bTi@HqXqC79B7-wa=i_0h zzFtHqZmUMq#(fAUqp7sxqVggVjB|Tem*!7P-(2 zVDVz4BCYuPks`Z0DJJzLkz@W(+`TB{ zM}VYVl>Zh9BSrWWtK=N)pipg_4|o2kZPfK{0YT!%BBgI^WK-$|I%J6T(?%;^tFZn2 zg?Q8#%_Ern9E?Mi$DhYvpQ#Xzr#Y6e00t*o-);VI0d3A_>Pn|@g6<%byS!QUVV%A3hK-!YnmYbQ0;T9@w*OT3UX zCKYVNHp{i7pL6@`dV!J;8=-q{R0(c1=V=hrl=3}tx7Bp;T2_*E?le~t8Q}j^^0tE+ z$lp&(R;xAXB3II$+UONBexImCd|Hsr9UOS>TTdLxwYV5$xD^^#YGujp0@u1 ztW4OR%x&KEd=yR3?lEC2Jx>X#g^|s2u2>yfXy?)<9pKiWsHwl^nPw z(S{6z#l{y1{jeivi1TfOY%mw7sVesS?pFF$+p`Tj#z%pKsT<>v$ls!Ucr6%yVngQ& z00T*$?j<_2H$AgJAGqxgc)T+EIU{7w2A4Iph&rxT`f%QbgE5MlY<)wyu&UKyV?C}6 z7`y4*UNWitrJ=fC9AQ~$PLjCgb4GVSAD$C%b3&{yEDApXBOMuGWqyZf+YnefHU@_= ztsaFeZO>DLu>ainW^09y#aEegto};|7=Mc?#@0BrM&E!G3>@;x5XoiZe&-y>+akx> zD^4DkHTl-jVK$@5^zg1)VdJm0h2GIy`1g3T;Y!*z@w-js&ei;XTeL4XSE^wt9d>uW zn0|zXf&(spf!R&|=!+?}#CmfmKg;2U%i(`lVe1)Nr{6k`osZDwS#CJ0Lzuj%08Bv7 zOK4x~`vUKeQ61hmFG^>+3_Sfi|4i3^nqY26u-EpVU(z(<*Txjp(aq)wxfUae;e z7#NthxBvM`&N+@_=5YxzwkQCQ>%!bKayc5|s=7PFDbbgV?aV+`r!73oR=0`)2^qV) zB8QToO0!YwqQtTCyx05H^PV^Fr<-YG;PsH=?M4K67%>K{MV|kDe|x<-2d>{9?-nUu z|Mi^S-?RX4({CLwuOp5b zk(c{bue;6{q_Lk17+}n+^MLQ8@y}zMf?Lzrkzke==Tmf2RR&Y>CP)P3`%B%aC8z#{!+k zYro`m>Gll1lUFuPErPGL!cO2Xyy@2GYQRO!=AxvBwv=gO+c4!xNn7l#E2yw#V9a%`!@{hV znqkFI1KZ&YC$kbw^87pw({0H2U;iv)zp0^M7CQ_N&-r8%A_>-ks8O*S90D)TFq!jGdi&1H5Wp7-Z{TiD9ZqALe6h7Eh4aN&t3?bUOEp$;TG&)zsH+N$! z{F)UF*PA)mhU;#g|Ngq``_D17b}fXyR4z8CYnCE)9Qakk zcQC@SnUA`TdveH;sWL}YPXBxwbOw8YR8zQ$y@K*tlSu>P4c1;`sYClFQe;ty$fS%}i*-7|%) zD}!H}ORzTbL{PSDE-FMD28QsoVD1ZnP0}K*!*$}WAH%7`Nqrugnowg(Bcr#_+0;e^ z%n>2wmreO%1vO0lhzK@gMT5!9#Ynx8NF$5XMr3r7E~7?^Yx@ZEVWzJ>z{gfKWJ@hsNCuEemi_;!%*Wv$+dCu$_+zG0 zbD}=-?iIpZc#rlwgZ$9^(yV2W3n@?k&#;pya$)atewk^vLSqrUTKp^@Q{h)bK|K!` zo<#w;j>i(-Z@nM=x5?q?YcZ^(m|~)>m=ma-+N30T7H#0{x-xq6^au&FwHkqbzD2Y^ zwyabbjuknINbN%juj!+GMpH<3G-5B&B<0%s)5E1Ai*12Xv}p(V(y#;J6R}|*d)Iy3MibQ>%(v;g%#HNa2=@*3U@AEn0I zp%mPx?e(ALMa1J#TfF|R&}I(j#X zZ?i<+u)ZkS5gQGK62n6cAPn(=X--1nH4kDE$6QR39$L3AO#J4Cf(7tPcbJgqs4qcH zo(NM1ng}DuhECAfa2glCN{;d9qWRBNykGW%;hjWBq$x6UT5o^@>oC!x@Jd&r`-X9< z%Kt5g^xIN}(|7#B)tZXR0V)OViYrQz^(orfYyAZJoo!-;-Yi!A2u%6Mges?KqVq10 z7IrNG6(?)%ENtgkk(-1YR5-F(yi>h=mp1+gG>%64vq}?dA~rrbdmKCQBF&cjQkWId zZ4S^^7XnaqqM$aweIi%FQ;oTG17BNmq7`c-5Z1cdz_!}!>mn@8@5Oogim$6gOF7tmIZ~e` z*xA-Qhgmp;gdOC2Qc`|#+ljr~z~%7zffC_-8H0%!vJg(gpKn&=`C=yMbdVC7c#UNc886{G~95j!y54=Yy;(sbPP+4)wI1!u3>n|P;q#L7mX z1YPQ9Bh+fkXk3y0F^c_}fg@et!Bbw9qv6h%A(&f6D*RtyJK)BJhVRI~O-*?=MR;f#AB?LDeS5{}DO+6MC$)(sD7mKEz>eDR>}s7BXz? zWy1Y;*!qZ#DESY_Nd1euG-mM~U6o*Yq1(?YGlK+TLd^gAR9Z(lUxMrOc=HDugS$5i zF9R_P=Qe&EM76ZlKr_S7+3;@vH5{@T6SqW8pUMO1Csw14l;g(BwY+8Y%mm)g<-;Vitk@dXB6ufRCkbgFWX6*q! z=%OYc9s;-+32!x-Z3*8Tw+WPd8Lj!$w$BM5&_bnV!YQ6dAc@?}#J!UAvz)K3pT3lu zbYs6B+GuMU26Z3Cv6_7jA6cq0W=w?mvl7GjGNNer_3FwX{)~L|t{n}9nj@m1SL}N> z<&xGF%nkfR^K))zPLED;KXijb{oOju6{RA8=cm&jl-yZyOq@_5cu*nSy3@FuKHy^9 zrD9S~Yfd@EZk!h?qCEH%a`dl>X`9=+cZbyf{O3mQCa{Df5@JyWlt;ivoc8|AYY z8GiR>qex(+-5&)hjYj7iw+K^L37%5onpg7mR94nGb6s|~Q>Ci{1GNuO;d}^-WP8ep znS&Pb2zOT?hrC-ODeuO#wrc>}(D;BKWSta<>!gATM{6|4h*sP+0gBkF`JLtUb$IYL zN20blj}@L^cJ|9&#kW@16e{rAe0LWaE@m#s_e$}yIWq+mLu1@zc%EiumzNavQ}SN> zLP78V)O_wMcTtrVHI;H@F8R%~gfRXK>eCnT#&ZyNu8_j#q+cltpbH>y<`cs#HW{|K zn|yh(uy$B-FTA)cD=%N@K_GUahBzqW=f7Oq8rFq%EP~)Zm94>b1Wew_S%-n=%j1np zCJOm&Wfkm&cYm*1{Ek>vP)zB38HjJcBZ{N1!*I#1m!8Z8V*qpYuKj)a5^ns{DVhVn zq7z&7<*&tBR51qqDV6~zF7pR{PD65Z|3+1e>ljUnOXaa)nPVIerfe*}9Z!uVmSXt| zlfUwEYg$PyDQuvNfs!X;z}&s4+Fa?O)91Dw7Jf{kWvV7d#I5qErq!W=DfdL6$%ORb z2GUYj?$>;q)41~9LwRXW)e5OUAWGD&;ymoeENF(>5te3bKntk7PBgw!Kis$yAR#p@ zLh8>pzi)mU)W*6JLl?FfAgmX4PngXgD|U$G?wtw>=;hGz)v0xywY`On`a<`Gx?R?0 zrt>#m6C?oXbe2OcG4x4{%HSo{cQSgJgL8-8j&%#A=o*%j12Lirxr!7CG_T> z2U(AuJ+r>6_{jp5xgYf>ix-?SnFXVx{gC{aK1Lz`!Lcn0mcemaDFC(A zJB^=|p-x;AUo_T{uwG-vw&*WaxZdONg7g#F(b*=E1Sx-Isw@^cYatn6_~2Jt(zKY@ zFB7t64d!Gd^y*`YY&jil*L2IES_$d@TLz;SDQ&~5F}VYcqR-rgW`*Un?yfiin(c;| zixaieQt0SYP=RPHMcqH30UyP#g736a1cF6)o1jdiZw*5EPS;jeR?mAdaP-~6J~BXl`)e^TPFYfLE1(roj!m^h*SGV6(4 z->lOT34 z@*2)23?dhUpKlXEjNx;ZCig73%onFIvQ%Hte>|#rtEL{R$i58wsMoV^i)#7f~)-_NnVm@ z6%x~~9_oXCb83OgNUvMjlnKEOjTOJ0oK}5|&G!_$%s4>$$*T-^=)Ikba=ig%TG%Fa zmiU}Xic${#ZZJ?9=%~*z=Zkik2F@S}$PBfzrTVxvJPa?%Uq`T34f&A7^3!iv zkY$E`?&r_wWKE-yGiZOT;1BkQ1=XzIE{Y@Q2^#EM!B9i*hP)4M&n6HOf>*aTo<_RP zrOxg0d{;XO_d_ZLIY;2;ooL>ZD)kY7`~4jjZ-K}B3FjyeqJoPlh%oRxvDKU$4tF3rc5e$NPK%4ZuhW=r@ma6&G(TWl(=f$>W zmfw);Km{?zj-$&xKX>U4$qG$|BY$C3W<5n0+zbTld{TUE}Nxl@GnA`n|% z%E$$K7Pf$mAT!kvy2M`6{a*KP`89t#sR4@#Vf^WhdxhLwdlTS@q1A_aBSHoX*E}-d zswjy%x5QF@3Q9R;Xx-E1XUKNAjK*_T`sSt{p~GVN$4;mzv%26eEdeXrzx!epb#o#isw;!Gql@-I{Qe^&e^7Zp`S)y-^Zp zS9lUGRx@clV9~*_tiEApg0v!nV5uI2qqpsX-IS#COK{0SH1*W7?OP&)wLxnzF4ib@ zz@1|i8CE#Qj-Z|m56A$Q5q)~*6;^nzfmLqA`YjjDkcFQD{QQ{(OlFyF46qY57htrK z#9`kIy_=M+-~c(OuTtEtSa(_7p>d zjRhSjn?(|&4sDEhs?Q$wRp)*+?dGGN)|AU*j*%k0h=2;o8qmr^Fwc7tB z*-I4dGJpXJ-fUg;BU>;{De0i*| zb7HXXrKu?=a9*Vp65O*LD5O#p#Ipb)&o$Svg97eJY}%8LnBI)GZzzu>F5T)GB2z*W zY>J3%MA60wgi@B}aMH-niX*H#TtPfg7A{b?otAMPxN7MlNh#5%0Hfk5CU|WgU=}w# zRZuRoH*uHuTTIJRCSbt5`}@8RUOh&|DkU*QPdAI(Ckv@K9&I*rNBCn9a`F4T1V+7# z=Fl{T%ltCz9v+>aqH9Ui4$2hH_bKm`R{Lj@q3N@UW|Hi~;b}NJ%vlGrd4oqNm?5kF zLJ+#4dhOVgiYiAMVY=wnK;~6oawAs0wA>yNB`-*gPEbVA*Qwwq8g;qc&kmO9Vbvi# zE01j@zdjQ(cbBT0hY=)6r-d>)lc7qvq-(IZ2OY|!SCwED7b8(wpf8M?gz#_ zghvn2^J$mtdtTF!CCi4 zossYA*v`er+$DKaIQ#*~cbgleSK&feDRJUu+QXqxx&hzKRHO=jo{U zVy`lbVd+1s*3NHy8}!E#?=vs0c=7rorY%&Po7iu&5{Qo;?954ejgn%iY##DGCn zq>NBRg|3DdEuMl@&^1?iG^lr54a?Mb#2+{JR0isMbE+1TH2njHN|;Wduc66CW%+&% zJngrtPIh@&7xE9qQlUA^oW3RT^62VlnG412Pd;)`UgkkZ!%IFgNZ1>7U4FRoKee2m z7p7AiwcP=$)a3xlU(G;fGDTif;)AUSya=!mC?jOCqmou{20clGS#H7cj0{Pku*XP# zc8_05TPysBZrBUAGvJ83OO5kH3F)fVA@HpDx%dQ8*(S%+_&Y)j!}KKv24i72-Z$47 z!EmV1Jm~;G65;>0Hw8WF|Iy(Yeq@C3)=r2p&lix#-{7D4z0Uz6nt46G$-C4 z!&MneMHug2bcZLusUjfEdiqm6{PYlZN&F+R_84h%VT%}nJl?d^VPRAH$plM2+m{a; z5L|9skq@YyuCy8;NUidp#hqpzKK3{gHLHjht2s-ozRlo%6&%%e35Kp%5`~~3N?^dD z-@%djy-i%`@OVxlKwJCc!ej@d2CJb?5l772=uyK%=kk8uuWD-RbuzQWgX;oj22$O2 z>5zQEXLhNhVw)gOPhtiB@6NVmT-(9`SAq;9T-e;vqSjjfP1AIe?%+C2WWTPF$>Vbp z3i&5r=MIm~Q_#LXt{}R^5;UJL86hrY`|M}Znl4qHeZ39GCa) z&Ol>RuX{pn0bAyB+;=WtKW5FI+!L6w5=m4S}Zm4BAm07Uw8>UXiyA8(BZ@q665&F=%w|;5H zksE!O95E!`4-s_mB{>DX=;H!n=mJX^UcCgqlC{bgHy7zl+4_y(e|@XurA83_-!e`v z7z>2_UF~hC7e9fa8Q~^dB+fa<*DM*r?voLdUD zn$(Zh(FDg6u<{maYkARimSbybyLGCg_;^^7i6I$r?eT+pA{uFR#GjtRIwiW{)ItJh3*?0zoo( zKY%_j>8LkN;H#2JeZ-|vm}zZue1e%v+szhYW$9U$!fcnPGp((o|BJsS7^l;?M*%t`Lc@Xgajt*w54Pxv!mg1VcGmvZot*HR_!{y#aJj+6OB zhVy3jzaVm_&|nU7EQ%Ws>(?2^TI4K|dX*qBNM&PxzJVAew+)t_$>P(buhsF$9=UMi zhL98#7KRB2cU|p$$lUCu7isUbn;r^->N>A%m zB&l51eOY&$usm-`ri|>hpZCuX4;ZZ;GNP z568T_3vTN^LTlUkY2CxteE4MsN3XWaIy5~Q#6Yr0o$BF=yn})+BJg(R0vJnl35PqN zcsPmR{bWQg)@;as;~L5(=D+%VJ!u@e;eeL{+aP2v3Mka7^sDErNPIYJX5S<*to-IM zNTdGo$E7~@-8ts(NJ8d}a|iS*qwS7vTO-89+Mo>rPdK8x=}lIJy$+#Sfz3sv4ZLlA zSxG~Y)p@xBS?L!u@+d2r7WusnQbh;&P|0Vl*Wdp41s|7|Y4J9@PLgitAUf)J>_A7X zteAc0uV2e@CT8@MO&`-BFR?fR?wfT#UfLz~(+?d!bGyizU8K<>&(`Z#Rnt_Ky;JHa^74A zJwORk(&nB54%Wb3)-Vuk^>F$B2>ssl)za-;0e91sXFX-eSz#7ui|&X0fzW)AApR2d zKsh0k8*v#xmV7&x%ZQp0I(POTc-O~Q3Rsu+d#>V`60sX>czH>jKWnaAfiBb}Z+=Hd z)b*0i4DDIA_3FXtD}-Uk)QA$%8#+3naDuX_0PLpww)Zs)c@~_!-J}9x=W2g&nit@$ zwH|x_N+;KewOITi)VZ$#6)~Co3tPs;?MtyY?teR%m+UFu7^6cA-|PA^g~O8vUzAPi z(HaVAFP{%>bAZzSPLg3AUS2k|sq%K#E{oGHC)z;s$0>+BzT~jR$7fU84{8`g;30Nv zxx-~_qQ$^>DxBjYqAGSXmTP_l`T)8&{)B{wKN+B8lX(rcVY4yW>zJL;LC>#=>Uh>N z-K%s?R0U9SyMt3E{8~aYYPW3JSHc$+RE=2cGb0b3%GoTAz5f~b$3NT~~pvj6Y z-@7N>O?Q(niKOXe7!g@^PcHz%#%+H@8{8$O$X zwp=zMu<$Wgb-1=(6~!R$IjHbtf0$dCtaRY$e4E|Sh*qN8dWp}bYe$^^O*CNHGNXYG zf}h(67*?>z+L|H|cTz!XBX?z0_o*n>B`obCy)eQuy8A)iRP(5KldA~eM>iffGZwGY zD$QO|hm!k!5gHrAzB7;P2)PTS=_{OM)am1LUr39?U2Oa6-F*Avh~pgk)q5^228SX^ zD%;g2^~tjA^e*x4{OZVNgqmPSnqy~On*k!UHMoa2)P^;;#-_pp1)SNcBFBoE#I?BK zeCNBLS|Zw!^tL5dmGXdQb>_v77b`o&Xc%x(k`ewU@%NTyHJ9J}=lKXqW&fy0u;S$wP!SjCd%5EhWHPXhzc z`o6%w^eA0i2kbVB$vi>O0zGKzt$8X_))YK?p<6dsldmM6X4+Zr-vAU8=bK5?{u(v7 zn=CyB7!5E3ios812@~Kya22Yg4kqUi4xJA;E{MiHtI2k9gUp@ZJbm7dJdDq^E4d$e zg#O0YZR=kZd#PXl5vkTX>J8N|7;_Z;HO!;&{=vTE;=xY1?CTZx#UMp+)(csNxPq;P z32x`yE)S)}{P2&mHU}DE^3(|QFwm;ft@K@@_r=u_a0vcZPb}p2I~>Fvx)xTutvn>_ zM>i=?*Y|=BxDvp30(TPX95Ls{{vOjLnln9okE|OAYHlLY0>F3X02sr1MYzj|& zKcFP9=d({c?qz9_=dU<1(O-*~11skRevAO;!Y9r>HHAdvJ<|&lH03wcgD-9BeO)L6 zFIjv-1M@ZJdmU^Oev!wHM=JR#ptF2#ll?lD*|FQ1FE0O}ispQ*E=55R`+cy7ZGeSR zaG9(s_q~^gNB?i#P0_UKIrTPcQpWv_Z8o{<)aqX+=7*bGnn+hExiw-IF5%Iy)UUur zn`Iv!-u4$>^$cFZ;m+v=#hT^6xY!g4!E;eS0kjxSq~=!OmtB*jOR4BRYl=Br__34z zme=up?7Qb$?k65l^18e+c~;=chH5Z7?X#vJT}5>- zg_y}LLE+R2+iny_tCRI2AeD802=GHekUCm2k|fEkK9aJ}Kg*Ri;i-#Ii#8p|9829Cx zyG$HGEenv@y1z-4g5Z%}r3B{9%DGV12^OR~YenNax9K!@FH}K0F|jvj2(YJg3Y0Pb z`GyxCYiI1ie~VG3>?Gz zl3+{h&E#!#5g@+1Xnn)Bdfb7^SDXan=i8qaD&(6hp&b8pW=2ACzT@ zOnhfT^>h^cvad z)Ur2sdc5JcRuXY#L+W#G8D{D`_TdiN6880VaUW<_0(!x4pb*bW!}(9WS>C@(-sG1v zLix@x1-HygMhb4KJW)NrK!Qn0^&y&xtQV!R!?eYb6iI>ZmM7T}$6^6P4U@%*pU=AM zhC$@lc-5uP!Z0vvv21pL1Y+*_Wdg+TJztAesY4`0Xvfx%o zh-_~p(5ms#`c+Zu%Bkq((X_d4cs&R?J6^?^a2WS&ABFoZasCpE3;K>*iCP#Sj#`yP zv*qV|KxFl}B+=TA1---)to+5mw{wPWWw%Z2`z^&EF&j+Pj4m zN2UI}4hW88Z)?XQc-LuROtPlX-3q;N;D_r5nqlcb?9D1(+JB<3rQ<#pe(ue4FDBkg zG=gqw9NO$i-Bei;`@G?Jj+`Q>?B6GL>$d)dI!F0q+&mkahw@+!CcdCTX4-_yU8o-G zr4oH7)8$^Y)ol0O{-1krB3s+vGxQe2?Xo?)n&78X43bTsA6$<{D^%Fdw1$JoEtLi7O?Z+-XjCnV3??(2qYb*y_ zaLAOe-nlMg_A|_?H=CJ+biiXp=tCggJ)F?TER-ur*fL3l<+xCE2ay$rr0qn!(<{_J zvKI$pvAl0KvC|vO;r=I!DHr_+fG0A!8+kp+R7nD)Z}9t`!L9vL*RDIX(=4sq(js;0 z4~wcn_vaRqlb=zE;6ZZZluFec=|A#74mdFVgG?cB_<1(<{km=CS*XTYW@Lg1j=}rH zXnT_PQ`}e5_do9>4O1NQ_>=l^BVBDd?bBZLIosDwK9Y7u!eNc#>g-&vLO)&176wfv zD6JCImqe|E&YogI^IIT#TJW*t2f-UMQjs{dl=g>-*$9%{g_) zd|9R6WFFJO7ULW#W3KkKuxX~t3a{8 zS|>a~vKo+c1N-o)@l!)6ka=ET1Q4t(y3h`{#-RTq-R;geVj$kRbwr=?ObluXWH$e< ze}4zbq&1mwkc2)6)Hj)@cd)&4jm)#1UGiNx%9!g}LqC%Y-qN$I`@gyrtKuGGSr)x~ zeG-M1W4VW3Yi?Y4ZDJ{CrYts@36P9BwJMgEZh7iINTs}oe1D=A=5>a9z8Lf9b4R_u z{ND5O`jppV{Puja|AyS~n~ww?Xv!2zza@ZyIs5_xgAe_N)C&?Hy)8C9L-yL=j z*Wtk9z~AsY`%8%b9i&|mSiODeI2(BKycQE?tu*cNTsI2PaW}ZzjGn%0kvbGFpRQS5 zct~^GKdYEucu=PLqop<*GcfJ$p5$?O!(GkIibcA9H<1$Q>#Vg%$G4R@fdpPFwH8=Z zbn=IjP*@E47&-A=%dlY*ADO?ApkV~(B<~S5!jbZN~3#{GZ8-i0)h68=n2(1LjdS5M;C9_4rRL@bl|CbQS(_X3L4R3j@pJELoLXfPe+hf>YrA8I&z*6{ zKOD)SMWPQFzLqzy7fYf`pP+Ymncv59lVDE}C)2|aIGL8eMLC;rSc^w1&=1stQ7R&E zF;(a-s)(u^j>h`UQuSxxq(jNjLD-@#u=HH%WLw3~s7M`xKsRmv-jOJM^Lm+{@*8R*TP1!TuBQIYH7_k8@sI8V_=m;KiXQ{$(P$hZqT&Pd(P16bNm*>@RV92EDX zpBz454Lcir0$9xM4O`Ze#sjf3FQ%8hVqrk{OZK6>3MpVjia8koeacMR;^t&nlha1ECV?iUdF z$8YZtHQelt)@OowcDedZMHTdFj_KZfhv?`n zg1uR}lwKrdEL^1XT@!;0+I$QoUR3$VG)sHCt=7o^!)3^+d%k^3g=3V5acOwnW_hM# z&^^yxy0$V#=AvHDw=iE4{Mv2$EGr&zW?_axV7GuF5G_hSZ=T^C<@a1I1(`xh};hPfOaG0eCp8ynDg?;C$BbBp`$kSvb zz}IX%0tM@n(QgdbX64_b@$vXoqK&cd%Ms{en?kA!u}~*%`#ptD8JemigZDe{zZ}4i z;)EZxR{6Wp^IfoCrTocGOeEO}Vv!7+*XmpoA6H&c`!cNB^W=7#?3cohT)>@`2RU8o zfT9yOQt%13c;i2zmUWW%si_3P^ZE-GfLOrNv;66?IGz+Y(`kr|?I*R1{L7sd3No;7 z_qRc%?ZA9kxVwWNSw{~QZ1N!=6bVHK{G4ko@fPxW@Sr6;VxM&2XXwQ%#>XSK&mQYCfKiS5L8ba?H_+%MD>o_+uvN-`MK-wsl zk?7^-lY?Ot%3pNBu?*r5LEDXaBlQ=QI3GG1ANELGzgg?0qBL^r8s24GmJ@#OzE_gd zvuTrWaLhtdJ8qLW+8LbryhK*i932`%tjIPdH=1EGHIz-kNP!hwFM`V!+A;{sF#gV9 zv8i5D4tI``ul{_8B&}UuF*XP<1ej@Zj_%#y%TemSMp&w~FXaDJQ8aNe1^jusn3A6Rqkv#XI>X(bhH&SU^_0PlE{~WIeh~$ zPD~-tZ!%2fNY3a(!RVir`h(YjU4?Z0JL_5Y({*u%TwLg|>>2iEA)R}zMmZFwdL?!t z?Q0cbCivSRyvNzk_=?IrD+8)o(&cu13BPXz%9YG=uC*1$-}O5Od*%5ZRqsoib)EWqrtst1tS6^(TCH+HA z4k>@~f%iy`W-M#{fG#2tU(A1xl{KTeSa_*Dimo-IPGyj4kRQdQ3ognt>T+E=BmP!V zJ%Q%gCSgAgS&(fMZyxR^YPPXQ<>M@4aI?U75-j>eR~*@mb5(Wj>O5FLVSrrj(z?;E z=#7gIV!KCpTB$VZRJHTAB5Z&X?jm zEdTzeq5$5DatUkPd%XZ#Qx~Xwt$wWvh=5SO*VT#a*y56r}$`WK|1bZ|)(O3nc z$)H%!5?fb~GyRpP@Hs>_9>so=3gtC#DgO79`1261wkUuHR$in`5*q6ae=^A)@AB0a z@CF;sGk$~Ikg+kRDI{oy&y}aZH0duLJ}JFafR|I%w~Xfl5nlI^NqSFq`E4|R=hXST z3|Ur|-bH}g`%7Ourv8aARtmM#j*h=iW%~0Jp&D)UK9b#Ngwo)L5K`EE=#iJ`PY3$7 zW*h~i@;!h*;hWK)pSCUacOP*(I*F>Qu<~HmBv(sp z_fShxr7W^jxcwvXcVe_rg6dduQ`{>9f21IMA|&B}OO9ZOHNP>{{9|tu!$yKjoa|PV zWMdjWnf^7MF()m7N~I<=lvo|{rwZd?g*GDR+?71A-0uEjjnQ#Mn}W_*epYiw4<-5Vg`>RwMWBg9bwicP^z$MQ+X|29BxR2{m7N7C1Lvd6 zQX(xO!P{`c&d0bvLv`#&c{tWuaP_qxU-_BJiA9}PJj+i0>_#sl6bxHg*8l0d}VJRHH zZhq&8JQHD)yZWhamaSUzx@8F>DNDsO9iILdb_drJ0Fivev3b$B}^BDrra9k zEES|7W_~p%If_JYO}>r_W`lI{X*x{ehoDCQLVx8BYAh7xmoIhf;apJjV>7J2mKsoB zc(Yci7B!x*tACYV#n9ZwJ)~oFX`U?&=@L>uRy&{Z6>Bz#2n;L00xI4ApwJEH#ZFsh z^!?$__Z#(NO&Jswe36y$C){eBmzO}s4)gs%b(VnR71&@dd2}7u4^3B=V#_Ua`#srzT{c}|`%NCW=z)6%CYt zMPb$9Jz5-uD|2+R)V?7QfAAT=#0&50L@;+d>NZj#MU{vf)HwH&zDL0$hBOqpO@z7+ zglJV+Orz6(t<_Iq$A^S^$|>E+_S@Ij~I%d^p;q}gNNZ6_&e*dR>Gm`)Of>PL5K)%hb z{Jcp%Ll;SA6M(-zq*ZE0$IvmmSy?S7kJNNWA2gJqcm4gC1S zgJdvVVIsOx;4bgzAty3j(yY&3U(_Cb@J|~yocgMM*LNEf-_W)kh+!;NbQ~>?3bLuS z5;owpQhQH+)s!oZRYZ+O1*nymNpO>T6cVqII@$^=cRl0~&kyuaP&dDG2GzQMq4Iot z0v0;2YV<=|=oJfNFkKAxEB-38OTW|nE-xM1TMSx!-sD{i{v{>vD z9<#+8GvQ}p*tTupG#Q=NmYR+K><4ln#7t#pZKr9HU4yhcNL2(5u8w736YW_Y++;_a zQD5c2QZl#D{-F*V=&j>LFbSmp#5G(l=)ivbOOt%V^ee$P(Ivt3T4Nz?&cO-~`kNg#S_Iz+|R^f z)N$iHah7_;lT(?tf3GwYMw5?*dw&*eH)|n!BF<>Ab>pDkO zSjX|5(sp%m{wF~D%)&ii{7JOpZ*1ZK-jg0jQU&m8oN|;~WzF1VEyPdOVtY(}Q;}-W z>nM{w5L2H#iR7uM$c$}Yj!#}&%ce$W84_NuJ64e;F$tg6MuMm?OXo4TBK1TuEaieq zFgfCeS60Lm*U<7Fc?3LFpZ&!$J@uUFp3>2xXDDW{q^DlY}BwiYx+x^aTT= z^dcn!(n~0bAXNl`AQ#Wxb3NyNPxJ6U^D^_z%YWu~J(K5k^W6H>EB0DS>w-`i)B!!% z--o0V%5Hx)T~3R7{sk!s5gQ%|7n)PebO^fk%|@msgT`2!Y<2G83^sZ2`ehB$`*e4c zuouF~)7}#zjB9^#6Q@TnAdnPzc|lMt`&1!&xk_MD5tE`Z{J?)9%qGX(P<;Y{l&mv? zlr33#G+zx;6Q{j;Huji+$WflJ6Qz|3G>b7deEo-+y8x8Yrx7RQkv&I8@VG=;7yGP* zaI^eb-Pv&$S9eP&HB8}7z-yrabs%e4-WRl-a0I$z-2zrjz|1VO*7yDho#b+ep*mMR z^Nt+Nu%G5#N+Af$6TG%K1QVL+jsk~u!0fKZD`et#j%y2!y?-r#X{r0ZQ@?Rln)#5X zUSF#EQItw1)pJ0Jbe7Ck>7GmTXXW^k(@!GB0V+x(u2ET>kK&z^2Xw>*$)a#ouZ^cI zK5xI~3Hd%w%F;LJ6NB#xY=1k@=_YFG-Yr)dcx+hRf|IR2Q%cy9@Snm;22D2!pD3zD zS@n|<$>gD=;VpFjps%2pKEn-N*LP!um3(wgN~nWK?%J0}UxtEgaBs_Nx6{S_2dEwG z{4xECq})}Fd{VN~mJ8DiGNbyi>W+&8&enz0%iZ2|AhCk^^h6}Ro7Ar()fTZ1 zdUo|2!*}rMYyp)Yt7gvz0HIpRR(TqRVC=>l+&%Pj6>rgA0Q|+Iu z_6`qSh>sd&nd9AqI8q~Q=`^iN4%8xLw#Icoc_DQWIG>`~-pqF)KQW-)&D{$@8OzTV z66=)YfFeZOc{+x(YHRq^bp)-J z)vTo8%bPYbazz9B4Y;`lJGmdBrB~pHr!GJpTZi$o(!s`7uX*ZLdZ16DKaR+%iZnW< zXA?PM@rqaTB+XHMxW#s}05OR=y64iP;!`l7j=B1O^+axK1LpKp<~8XNt7$?}P~zto zJus?z#m@>2Z!7-3XZc*QLCz?q>YJ?Q&Bc}Py#hqWC0n}CiPrFUa}4sC){^b9Pp9p) zL4g@wJZZwK+|kL5G*y3aI*tUEm&~#y{+LTp&=83q%FolZ{t@>f-926pRhhLxCoAH; z83F9nNXULB+((KdBv|05ap0rCHvgJx!F_+gl&|SUcBWZbhF5v}aGLsn0h0~mV3GM0 z`gXS=O&>d@wd}2xslk27r|?IiVdG!hP3|uYy;%+!F3mb|`Xb360DRo-?fQ_F*Mp+d(t1G~ylQi`dykKf^p%U{KNIT71ybddp+sup zk4=QAKBXtnHwWhalXcRNbNtZvbZNY{g}Dq5oto1P+^a0B+b??z6!fmnveJ44e66?h zpn;=K8Ld7}fVAV0hQ_*so_?GpH2)+|?w=7M!($LfJa!Xg2eJYAi5ogRL$PD0Q}D{k z9}~sgknnXX=iLX`k76|k9nid%I{9jxBzT*E=->Oih(=x_;XTO53{#eT$P@W?-I zoTV!5jm&!gkIg*6nm})O+;OKaiqnB8UdEATX=5jxB+64-pvo%ZV|Q1D5e$AW_xN?2 zs@c5L@T+^KtEJwm!&@`kC|UBLh(uKOPUl*7g3#;+cxnd1$gjB}{oZahxT6wL?-XAh zHp?_Bq9%DGr%Lx)*@0sO*Up?@SFz0Fq%nT4TCWLw16})jbdw%^kRoX9rg4CSlI?0$ z+v|x=tTxKsTxcYhp=zNsRc2WYxf<+s3kn=vv_U>ZoqozIYnp` zfr}JikF7NSm`4C9%{}4g9FtuM+PJ87pF2v5Ttehx-eLD?JWi^V_HfHTw4}~!Bh<8H zE}ad+sQq>kH#(V7j86(giq`I_l(^n{y2NgxW8Oir{?}N4|HDYUd~Q?Ld-B2b&H_%o zRV_KMQdlFG-#OhgPfaQr5?_TIJ)~>Qz<$|CUU)D+vD^Fh^aCvd0=Jj%9I=w{D4Mt? zidJD-ue^a(;471=faF@4<j%N)-_-ZZf^eR#>Xh$>Z-hS5W-g?}YAQ&0=^0F{L zIeh>3KMv)^Fxt!`n^@kQygw zWM@vqK2@K6sx-?}PtX%WYUN~wUR|{@A_1_S%T^N%0+A>V+D&>l((t}FlR*E_{j1shYc zVD^LcC<`$Pa3S9R_sV{0V=?#P`hXfoOdZ?|FzbXlheIjNFlHf^0B={!b+;Rs{t#&Z z%nifg4#x0>vhe+HR?__Iy8X&@>V`25)dRr2Ff87@nBHI(zMl;MrKF$;1W-`0{t{kA cXm89!s5a$q80Ii-z(N298YWJ2e*dTBKQ5RI`v3p{ 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 309/336] [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 zcmY*fWl)?;v);ws-GaNjvjhu^EgIZ4I3Yl=g~gq)5F|hd9-QFr7D8|j?yd_Y1h|}2 zU)}rN`7!lY&(ku~JyYE?Z!8R$0t43Qp`)re)=t&HjnHYJ%Wlj3I6*IJp#0aTOP4ar z*}W}Rz}7E@Z8xRlv!oyswkh%po8{g+GpyE8nn0Y9I+PWtfLWgq7hzzEzQ-WeYIn`UxFbd3 ztTRjGb`a5++}pPkw(a&TLE@_O^cq)TdaXJvf?&p3Mu*s4OstLJ+v^`e!0e%F>^88+bK~2OL$&V&1ICouHYk&x; zZ^$p91U`>t^Q7(3DP4ztG#B$@^2DpeC_=YNV0e|(sz45{ie{GE}~ZCOBN#R zr(~<-G`E?Zz`Ufd!JhY>!liQ=;u&3Yq&b;S`g+^-vFA3wZ_@0cd*8g%PU%I$>4#Z~ zHMZe?QT2$v`>jr2*>9$#$p-Tm@-l48V&6qkq5Ol1B?*wAF>d*x#hF``M`>Xh_w5Y2 zNR|O17s=plO4;^ykTX5PEki1`IDhjh}2ifGaU5mm{zzIl^b*0VsHo!DST80 zuMUL8f`lnVi(?2S1ORa0Za93s504NEw{-rw zv+7JgRCNc&M};fz**dFBVIz$-L4;05$*BJ7fc1sKs^1Xr8vwboORHc|ah&Nq`+Npk ztKvw0TO%wywGm$t;o>m%(u|(J2!r}RisiovOvh%Xt7tuqnxYNkz!?Q$MAf@>_Zm#3 zCa(=|8S>);&?CAiK5vr@o>(ZBp}y7`ow|F4*P6{Y`WbCHqaVK6=YVv2N$YvDR>6a%_wlOzu0{ z_UYmpza@(tNy?@Ck|b5aNU=^|kpr`8*A3Q*y>Rr}dAtU}q}PpWnHufq1De;7H5v-| zh4o?a8(RC8O`NNbta9V$FTza_ebJY~EOcAS(tXI1yS6+D9~uxI(Dd$ggRk3sj;3V1 z8Drx*Pw!6YX?;isY*L@R^_$7L8N}z${e#LJc6i6aF0t4bs{}2!ABm&K=2$g?Vxyc& zJPl~l^CZlXxqoW8Xqp-fcSEbmZX~xz>J)sb^7&0nm1K(uadkgUQ`H+G*m``a)E*`S z5EY3q_&U4e?aHk<6ftCzr70NR&d^^a#jx~*fv!CCh8E=n6V@JT{bM|4^2VC#-smHX zaBT~IVWAAFs}?0bxkCqqE1zZ!kGl$<>5C^M0O08f@K2YTbCgKaf*WCBCxB1T)aqu2 zy$ot>-IKu?0tLI0IorV7g9;nB=7yNQMLo?0C>nhJ!V6VNjYT{j$#n((_IbEInI5`@ zJ|3-g{r$aB)c*Gpk)+iHt$acp{ka^4e*b%LRsD2#h8Ue6w+Mc^+1R;mI@sB|AFn)E zb6)-f?VN)?Av`(H)*cWS4{hUe-E02mipTo`HohmdnLbT)Qp5oRNxx${%Ikx@q}ZBg z8}Z$Cji6nK_123hQ=mCc7#(-yAFl2pp&l!+N2zNNo{V9*Vv;#dAGHSV!0Y^bagw(% zW!IzWefck*fE9JI_Mf-8&iNh%Dx-;|eQv5X<*q?KGKQj3dj5Jal2Je!j0*^8&$ zmb^xU({u_TTtFq?OX%fyPYqe(RAu?@p&!)_%DVpITz-Q5R?vaT15rpp29Jzb~ zs7%AHkP+RBM{-OE>tG`Zp%p=oA9Y~?SXn77*ug&l_8>@r*#(M)H-O&nXjI*Ha4>fN zdm!($=!qw*%e=-jagO&>JeqhE)$^PhNr93pJ@>-$*XuM^K)GZnGO%+JNMM;HC*-MxCA1SO~>sJj#Gin+z@g#jNLo;`t zXn3DMV&&>RUS-tk@N>CbFA2Vqrb8iH^b0j#~ivT0%#;kemN9JlR&QJo}59c6I1 zs}P6)O3I60o`&W8aoD@;gD>NIA07umcjHB!62io9N@=~&UD|MWZiPhheaHdcK6=~P z+6>Q2U#OCX`IAfYW{JQw9lrRni-^~Je)LtML@Es^P2Jr&>79E`+8DNs)TeQY0zTs{ zdTzrrI|85x^oClRi+I6bT@Y-ImxcmK!1Q9U*X-&s$OLJNtAC8QcT9N50FXjiL45Y+ zZG;U++}aK~W`eO_MDQ{cV>d!htl`3nC)cPmYE#^l0~1u}>MsWX%ik6c;%dy5`$m-0 zQ3t=b*v`oR6H${ZSP~21MzYd>R`I2BM!#q45+lQ+>?+D1Tc2RU3p^vkn z3_eHi@F0QQ-mw|``2Gix875Ggr90Q{W4SAnlpG=;XsCu-@gRcXml$S|_kuI^u0d;8x{ouOds>aXA0MWSlx7 z$j%aoKr>K|ulPa%Z2bqH})#=S%+$pF)O;u&LuZQBA)4xe^GGh zdFq(}o&lT)E=x?T1eP&}K&h8bqovVv;`CuGYtR%4OVe1Hzg6ds<^^df+d?ualq|Io zV5I$lTpvIhwN`z@6>!4MPQln_^i|}XI0iYH&w)SaL@MW;dlS8Ml$nXL5h4iapkPJU z4&cZr?JtB@Jri*nAryd>B40$KByBhrAXf&p#*PH!Omod!adG1&8<3cMQQ zMI9561!as=aSFpIPsN&f!DyWwKdxAq@QrOg<4jnKNrCJn0i1$V`^OkLYRc60gFxbn zX#?dxgDL_&Z(-W*S8i1V?;5?+<9VUal3?O#1Tc`6!M)zRLS+57IO1T4gv8fQHD!Tk zMitX=f<%y(sFt1?zQhz*oajc}zP_Jjh6r?$Eam8IF;TsrZ2bhHjgdJ_?2qqn4ktn` zB?_-3pxL8a*TIzJt>w26{9Yh}=g*NE#nFVMn`s{|O0>LH! znzp_R8C5-6`~b#yb*y#LuECx3N!oOXFMu?7hEz0utB%lbh6UI)_z5hivrPmh%)4pb zBrUyBe1#jMm*f*+&R=*FkLQ%|kc%-RC=tDcO9tVvRy0weJEf$ZdfvVM-tZ|p8BT#v z2Ro#3I(Yp0fVcC?yJcjzNe7Va2}3 zUHD-rZwJI~rjM=+J+JMD_b_PTn$AUO0*F|pSQe7}0u{mAbpZpv5apV7H_$Z@o96^= z<`SY-dVN2B)t=7%#aW z{1~&poNe_@vE514#=D&h-p0T#GST=VV$i_+w71pfxIRfaqpwuPBu&3}Su{?$-& ztDUjGnsX!gEq`@Bp|4+Qb(OWKCHieI6WD#4pk*_yltIF&M`nLhe{z4?g&;bZi|F~bRDpQ^jDXW!&GGO1RyTxpnP@VeJ^IS z1%YT0LoP|PZNw;$?N4Rr$vjrt4Sg>3g#u<*?|HH&euEWY9|k z@izf8>T}lhHwa?RLl^NUyW6wvu$X1nQ933&qWZmdE2-=l)jh#TMLcm2=RX?&FT!J@ zs2D%Q2k=qPl^L+I5BMXoK=~u4w2`Ozs(kPb9J<*kF>TJgzy~qSDfU(^YShKwV_+b` zz0KXDH!cEYPx%TUQK7(k*MYk12O1qVs^g&pgJ}wW-dI?-=DM zV&9C-N>h?EZ^aswll2FfmSAMzvv-`B7LaxZ-jfiLPjZJG(Kt9jy~5&T*`96Y*!;Qu zwKX%Mh?9jD%`ZKH!BXQK*yz4CbLMi5Wqm97v694&QMon*WTy81_A7wy+^V%FcrD>) z$Cxq~Z{|Aj3&%X2qV`9w+B9{a%9qkE~(EVXfs7!5cS(4EvQf4^1bie?8ddnw7 z23wLSbMEqnt>f$ch^_5liZ#RV^Z8PR0Xz)Pfc0os}FaN&JQ&P z)pBSSb8i+Y;H}#FJ|&lPC|Z?HnTA}(N9!QUb0sq5?n^u~V8t4!;BEQXs*LRDz1+X` z>T_4;L(7eU3Al?_#X<%EX5r;5Oi;#_Mh1@3lTwUiG}IKN4jm#p;tfWKH)qp+moNKB zjv}k`xRQ7!g%5Yn&&F z-f;&#@w)v;oIb)WLIZ}o5VZ>w=eD`&x|Gt7#gu&whl8Euaa<5fu5UC{7omnsJuBT; ztX1^tn{-yZvFRZg`R+{(y6oD-eO`l^i|-66VyuH}KZ4=e$g^|!s-ecveB_zK4!Gu@ z;UvolgM_jlnCq=&Wrp%ErgK_^(n(a9LBX^sFIvn!_-+ikh&a4OI&2yP#S^$#G{UeN z(pY+2nB@g@Wa@V=9T9X?5+UkBfAZt?Y6_8xRgd@!b^hR+s zCu=$vX9>!~8&4(rChL}*HGF~z5^#R~w4&Mrr}Hb{Z!b&V<_quE3qlDB?2i&2M9L!1 zOev8oKMt}mIkR9kyp~48<9xt6nqw zD`1=?1H%oy?CQ&Jlw5xrSwauif=e1Q>C6W@eDZee65~Ipt!iW}kvyvU?7(mFU>NEX2&?9n!3&dQCfqR@#D#06;_#2&ET9nTVc+meno&z1qXiuB z>SOZCYO9Le)gaDr9$#}&(=v}NEO$|7D(qUxf{j1$h>1n@p}d&?>@?DdbUG@3gx#iF z9QNwmGstOg{_}$3)SRiPM_&)$(wmR#pZDVM>t^4RiR-!xyz7PPQc2V~)_Uc8v=~-? z%Ov+3wI~qV$K`|E+V+pxD{Dt+vw3=)dH7mP=mqmF{#Gnp4k;@ZNcw2RN zz+btPN3?$~aggB#IQV#LqEUFCQ2_v3G5~-C0KbqWgI}=|A!)$i=p5Wox~{gPrICbs zP0Ap_px>L0k{?=y)20w3*S83z3m-{O^L=o=@+ka3v-O~D`UOn8UrQ6?_PD5))`$dC0!xsr1$f*kH)x&~Rd_ zv}hm#*fm&MWj~24ZT5i53&kMi=6)j67to9; zlgy(mrECCMtr*8iy1Q)Gk&CEu?zht!SN}0UTgi(%pGk)BwY6wL z<8wuKmMG0eKYED29tKvO{~1K>PxOzM_%wVG z56cf+zd2`X{;7nD%|)Fms7P6yU;FiVZo*(;cdBOxbM$9-xI;tKZ;ze~b_ok*((Ds> zNr6L0fe0gFqNqt)%((AH;3ILy8Tm*F-8`|Adj{#0o02NJz-fc?M#$f0kH?3oQ9PM) z1vy10YrzR4)u`?lzQtt|d?98QmVd^-_G~_^o_uURILtendov6N?RT3!x z$6184L9oiCHc4=nPd?gxFQOO8`&X^omze$c;3}_3Ay;bS#)V_7@fkW_1FwC;qkC*i z0sUB?)iUEPZq_~l?x_g{i!^sgWXG>El;Jqs40%H+|0Z%7ORr(~I3{xZ#|Bi$4_`mi zUp*?aEfZ#$`QN??iFs+N$eCaF3i@S*aslvjfx_v@Y|ESvJROh78j@qp_v*6VJbe&F1R9(64ExgsacdOrs1N z;7Ha$$)y#4>HaPYi4R&=M~y(oiXmMx0rwH)-9_RN`_l$mc%T3J^-=*ld3~MN7M$i> zSnShl)!7?1SRGBmYh>%ev=nNLqXU5}l!R5>ySNod=LGD}kQ>B_G=+YgZ!?`=#tfFNKXdWp`7`BIVRKRP6FY_wU-wm~vRqp-2+Za(iS_fPx`xGu6vx zK#~!mxWjKVKD7q@ofennc0PfIZrH2XJ|zKC^mloVt4N$;nSBU$uI z-*F&TyBXMLhewr~pYfF-HDd_%;~hgFrNHRMRl>z8!7v3> zWLx3=s82o2c{{$X$)gOi6!~=Dm+JL45M(%syPpH{=kxIpFjx!gMX zC~9Z}bW1S@7>+-c46E)hc>>mb;OzpU7VX)k(Dgdc$xVLmgAFT#^~z z<(B2spOi@@|H?>DAV`)HA& zG}N;`Tho$%@4uiKQBZIV8eG3gJvwLBxO2LCT&W~Y>cIJRFj>*p(J;*!t6rBL#xM3J zr68bA*Pj47_b{vVA+w&Oa#77GN;a0EaFV`NK$@u{a`!0&=Ot81Jx{xj+2wWtks~u^ zXvHsFellHJ|GEJ$NmBf9oBU3@3+Y9xGFO4m&0wg~o2DbG-(aTR4!o0lbnY24ffddgal zDrb5|ui}QwEK@x)Lb9$X*2DYr=-(j`Y>`$wszWHBa0*U zax~UZs)MShO4ShLSSGbNb z^WGGIql+h~&d{y@kwIO1jKLUW#24SRhzNjsa=wr2PV&*lRYQvtE~ekIL*<7(V$RW5 z>1d8pOvTP(_vF+E%qm;dXXRIa!w*a`KOcj)yG2Xy*<`Tcu+Wfj+W|^2VB9J=ddx+< z+;-Y?$CPX5`$&yDJyBN0qM=mx(?d9Lw3VQ9vBM2;YX6T35(c4Qe8AGAM z%JJrW!;LG6K73Ccr?PF9UB}oR1N$F$#F*5!7}+FH*sGm~3_X)|qvc_$RD0ohlA*8P zUQaJ4;s?B6oFIpXzh(WLFlCzJ<*wBs)u@|}2tI$kVA>9M^`+491-6Ya? z-ZYGF>W`eY%&su6R35|jx+Gs1myM%@yF4PpwQ)%55`>t5D9*{~k9GCJY(S`mS|2~j zz#3|o!brfU;3yi*#?f&Hn3k%5tztKe~<{ z&%>Fg~m{GAJVym-pe6exPmY{xNA zxg=4-G5GNeBuM=}>T-)lGlKQAM@lcz(Z;$OR2ys1? zNJUn*NQ$0X0@H1K`ipdWNrI0J-9^hNS7*D9SaTeyF!{aXjzw^*Qf=|-0CV-{q&x^k zmhxm*oXfo+Y6wBJqpDuaz+mOoq^T^NIdySdFyiIerMe`teXs$I84-_Xqibb-oArYu z6EE5UlzxBdyWIt-V-Ryi`_KOka2XvS6MR>Ohx&itih}_Fisy3a|C#}uS5^s#4fmF1 zW&7Xq2?GGY{XfX_R|X3J;OD~k*89DS-CMZ43<>rBPb~i%JO)3Pl?Ud+1?3<}&3y1N zJ`Q-L90AS0N8od9_Vk>MlKeLwpvn(7=O=@o$#DXs;8Y-P>VKj_69@pjd47_7e&GJE 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 310/336] [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 311/336] [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 312/336] [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 @@ "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; -'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 313/336] 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 314/336] [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 315/336] [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 316/336] [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 317/336] [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 318/336] [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 319/336] [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 320/336] [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 321/336] [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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"; + "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"; 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 322/336] [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", From 3cfec3223ad53dfe84ed20ba083990d3c526f669 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 23 Oct 2025 13:17:53 -0700 Subject: [PATCH 323/336] [Word] (shapes) Create section (#1012) --- playlists-prod/word.yaml | 18 +++++------ playlists/word.yaml | 18 +++++------ .../manage-shapes-text-boxes.yaml | 4 +-- snippet-extractor-metadata/word.xlsx | Bin 29026 -> 28985 bytes snippet-extractor-output/snippets.yaml | 30 +++++++++--------- view-prod/word.json | 2 +- view/word.json | 2 +- 7 files changed, 37 insertions(+), 37 deletions(-) rename samples/word/{50-document => 45-shapes}/manage-shapes-text-boxes.yaml (99%) diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index fb94dce48..72fdf9972 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -377,6 +377,15 @@ group: Tables api_set: WordApiDesktop: '1.1' +- id: word-shapes-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/45-shapes/manage-shapes-text-boxes.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml @@ -544,15 +553,6 @@ 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 db9076c31..1d848fb05 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -377,6 +377,15 @@ group: Tables api_set: WordApiDesktop: '1.1' +- id: word-shapes-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/45-shapes/manage-shapes-text-boxes.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml @@ -544,15 +553,6 @@ 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/45-shapes/manage-shapes-text-boxes.yaml similarity index 99% rename from samples/word/50-document/manage-shapes-text-boxes.yaml rename to samples/word/45-shapes/manage-shapes-text-boxes.yaml index 024f6e6fe..42902ad03 100644 --- a/samples/word/50-document/manage-shapes-text-boxes.yaml +++ b/samples/word/45-shapes/manage-shapes-text-boxes.yaml @@ -1,5 +1,5 @@ -order: 17 -id: word-document-manage-shapes-text-boxes +order: 1 +id: word-shapes-manage-shapes-text-boxes name: Work with shapes and text boxes description: Shows how to work with shapes and text boxes. author: yilin4 diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 3d29ce38785b60ec83e2e9893b1348f64ea7e873..0785001fae8e2ee5a84a0fd38e0dfb20bb0da124 100644 GIT binary patch delta 16695 zcmZ9!byS-{(>I);f#On%6Wra36Py+Z?pCC@Q=H(mP~6?!-K9|6-KDq`EAB7%{XWlo z&iCbyi9FW!+nWt{1;RXwzFHmb??r+xVIj+n51$m3V4>rdY` z!!%V>S*g?jwe}p2Wz`>*=7wE*r_GB(&Yc{9>=+Kl1S_hMSPwaCN;daT#FORC#Xkb_ zv~+9nXwFEJiX&8fhkK|stst2?dZKdR z!A`5>aW-fIT#Pan-oVpy9tr7G60;6EBih|Aa(M!yFkv>mTR#)UT+K_(TQ*~>W)a17 zWv0Krn5^{N>4P3FKX{`JH6W~UX7u7R{ei_MzsW&8)DDtwIrqz$gkimDy~Eg`10}D0^$1z4DYy9?VqXmm3FX4Z5oF>q|3n zd{jAfR798y}#w;D`aRl?oNkS|<4v9ScqJ<+gP`Ir?XBi;D zCL8M?bB$bJ>5?^$%jWO^m02geRQzs|kh}i!mFK zOc|NEHcrkd;t(HuG;CU3o;rSZ3cUHwE~32RV*W25Aa2S8uZ{(k3l1^6=^OxvGee_+ z+1f9&V-0L5ExT1eWePuT#d6Y3Bi3=<0Eh0J|K@9@JZZef({7&>gKDifFgQB%&URbVxEh>h0Kaersrs`)Tv z17sG5*gCZ~G^X5j{?UydbuaZNdSys}C5~L}P#JP6&qT6MEwHO; zqhh@4bHlM(5$9GL{qk(iMC6<+=Zmh$`CM;}q&I|wZLN&rq$VJF5I2y|~x#x$?f7HV$$)H`LZVQBe5=csF( zG{2WM520qSNcE2hGypb#?&&jK=ajT39tS7iSoW8o;T7Raoo#qz#|O;1jD9&sJ-xRSc9DFnan38M{kzbvEMnDBW# zM$bm9UB`TRtu~I5uYk?4#4_>@Rc5{1J=%9Y-#_h682Y{(-ojoU*}7h@Lk~l{o-RbY zp0=Z|3}5dbdJSLPbYS<_qOXsynO)Bp$M&yxmsO(ePXqsYCq$o9b6yjw57}V(udfRe zGsjmmQLhj8MdYxxs+Wq+hc8t=se&gBUwuxV#|)lI*~V{{-C#bpAFG~|Nd!C6;MZwv zb~C&dH%8||FV8G1$Ir%pJTbjINJMzJA$8(&3ReP%vl9K32zA#T2e|r}k3+p=P@J{3 zH1{{mb8hS}upekg%?9|Jkw``t1(EToFnno84>v=tgC<<9FUF6@Y&NWWxDAe}HeLJI zJt{t23m7X_CBZ_i{~4wQcLoMoUiEReqD65NdhKU_nf(>ivV4+eJ@-Gf`jsZX!2hL` ztZ(-6OpQS{#CzKRSv-(Au$!EbsEuxQF-`=vkmz*;{-?jNls#$OXApmKjT;7|H0kH$ z$p1d}^XPb}CDbWO@(V@u-lz0~C5Ao%M7WACpBHVfIwYan!ir#xxL-|nj20dpnFe=L zT%wJatRq#mLSkKU04v@F28ccC-TYWY=m*hRh0EN0rBlpSk2HDr#D)H50jUp4z>QXv z^!>RAmI<4ZTV5HhsG2F?DC~Z&2q+nV<;Y0E^Sw_L6#|{;0qV5%b}t7^YES{V(J5ZQ zcTCwE`G@al6ZC7SYmcZ^hdh!2V)rKMjkIYrX1|FZiIx6jt%$s^yCr+miw)+R0kr`q z{~e{cAzeSbwc_Ai_F;$E6=Hvbr*NpAu>VHPXHrsg;du@Bh(xtxPGrmn&>{2POBV0o z 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 K#uk$cQUCyi6ua&K diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 69f9fe20e..48d3b1c4b 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -20613,7 +20613,7 @@ Word.Body#paragraphs: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -25160,7 +25160,7 @@ Word.InsertLocation:enum: 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -26427,7 +26427,7 @@ Word.Paragraph#insertText: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27291,7 +27291,7 @@ Word.Range#insertFootnote: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27314,7 +27314,7 @@ 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml // Returns Base64-encoded image data for a sample picture. @@ -27325,7 +27325,7 @@ Word.Range#insertInlinePictureFromBase64: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27773,7 +27773,7 @@ Word.ShadingTextureType:enum: 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27792,7 +27792,7 @@ Word.Shape:class: 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27805,7 +27805,7 @@ Word.Shape#delete:member(1): 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27826,7 +27826,7 @@ Word.Shape#body: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27848,7 +27848,7 @@ Word.Shape#type:member: 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27870,7 +27870,7 @@ Word.ShapeCollection:class: 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27889,7 +27889,7 @@ Word.ShapeCollection#getByTypes: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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27910,7 +27910,7 @@ Word.ShapeCollection#getFirst:member(1): 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { @@ -27928,7 +27928,7 @@ Word.ShapeCollection#getFirstOrNullObject:member(1): 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 + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml await Word.run(async (context) => { diff --git a/view-prod/word.json b/view-prod/word.json index 87a70604a..f91bdf5ba 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -38,6 +38,7 @@ "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-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.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", @@ -54,7 +55,6 @@ "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 9189eca77..ebef6fc8f 100644 --- a/view/word.json +++ b/view/word.json @@ -38,6 +38,7 @@ "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-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-shapes-text-boxes.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", @@ -54,7 +55,6 @@ "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 ade8447197e2f43837ac2e74b7c3280c6ab4fd07 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Thu, 23 Oct 2025 13:43:46 -0700 Subject: [PATCH 324/336] [Outlook] Map code snippet (#1013) --- snippet-extractor-metadata/outlook.xlsx | Bin 24926 -> 24911 bytes snippet-extractor-output/snippets.yaml | 32 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index ef99fbe2699190fd28de29aa670d30cf50b8d3c4..e7f1f77f9fe9522c869744307241f6df58739e6f 100644 GIT binary patch delta 14899 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 delta 14931 zcmZ9zbx>T*6E?cIOK=Zv!GaSUf(H-o?(Vucf#8cf!GpUji@UpKarXrG%lo_a-LLAN zKTe&Rp6;2RdFB~AJ=F`d-V0Nki3H5cLG8zZ0|2;@001li0N`!U?&aiaXX@l+$L8%| zU#X$0yvBhYnAiA*y(dhowA~oRSY|^~g+mFCPLU{=y=aRg6E{ad_4+iaq;C98eIO#* zU}Gh(>*CyBSa?IDxUS%rMMrM>VgF|gT`M808&}iU4uz^Zo5rMh0VW?s2H-xI!^Bm? z#fDOgeq|oN5h*~W1=o$v0(ZqTtIAqx6?c7_L1w`y$+z0e7>?ij__=_J|wjcV;VOlu8KbbYD*cDu?LEetWCx}*^+3|kTn z0@hR>!rgNC6~VCBoFHYu8*n(dhujf%skDMQ6=nUOL@uBa3VJR2D8MW6QKI&VEOaNq zUvC;iT|lT7r-x7n0jY8m16|-PCL+Jlz3MA=2m7xrIKCwzK~`Fy0**X10d5hoN zu}O`txm{D^Kcl|I&@w4+cacrkKAb;O!0s|V6XvkWxwhcE6y;VNj05sHMy`E^F(p2 z;Vm~_bT*(g;?E}Ii%$}5T$}?B%v>N&qzA-B+rP%-HXr+gkzMl=&EI#l+HSwI2Wu{t zJ9Gf2?{I61J7{Di=!ZDI8n_`A8?O<32?&$5E*pGah`2lcYPUk9udp}QoX0V9`$PM0 z#7Ss4PN~JpOFM2-HOV{#%XBmw((m;n?+|bB+~}*V07xQA7c6@lCtx(H44E%H{nkD& zii+Ex8)oH5avy@ak*3BW+|Wy?eXXSJ8j%5X9kCy)$bQa!vLShB*(*ZsTcOQOX#xFW z+#Z>j5R#1s|2wzLe5KO*8EqCB%Pb?21EL;IRmJ{rVQb$KgX<_=zi(NdrY3QiYIA=imA92e%@RY3f}lLsY|zsnJk-Bo5oBQczt6E;J}SviT_4V%wdf*&f*zrgA-S?ZZDQEd?Y7**WG~e zf(8J*y}eWN+gnkNUEC+Wr0^C~Zy2*griDTiQld1+v%X8BLnGnX<{7SrCpn;6FV7zFGo4*S(!M zv2OtHy7rz=oPbX?Z{XM0A*ZglovFM|(U+k;*IwYk1@QH6%l=~?_~P}a=(uji}=@j2wD70Net2`l@&xTz(^5eyU7SXbk66UFq1RP{4#~)O;z&iq0!W5lKlw6JK^r5QZ_UjcU4<8x0ivq4l3(Q`ym=0+%OdB;_}Aj! z5(6@%AEcLtfTZQ3ba{=wtz77p{dnk>XU+-5AfX)^G~CT={9O(~NrPZ z_zca)RhI7WN`L+kpr&HQ>_1Uh6dz2?lLf9@zR66t`7tWNP&c0x7&afa9ZGA}%%w46 zc}+8U#D-f=brV>ve+K{S7@r2Mh#w2-KYA*y<@)Viiv+IvP`B84qvR?;1C_+L3)zJQ zWWaiM{xoXqi|dp7>X6W180n^2dsUHNc+%>qN{C`ec(A(`z|WL&>_ffa`GGa;fY>qEpzho3U!r}tU^G> zS~3pd0A=;*aqDx^R=%}rItX)xv+=h8@Li&daG;1-zuSKKU8>WW

      ZHHp-lx}`QDKr*t` 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 + // 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. + + 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) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + const bodyFormat = asyncResult.value; + Office.context.mailbox.item.body.appendOnSendAsync(text, { coercionType: bodyFormat }, (asyncResult) => { + if (asyncResult.status === Office.AsyncResultStatus.Failed) { + console.log("Action failed with error: " + asyncResult.error.message); + return; + } + + 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.CustomProperties#get:member(1): - >- // Link to full sample: From 2306604c55c6a0abc75aae0ca540ad54d91fd92b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 24 Oct 2025 07:38:17 -0700 Subject: [PATCH 325/336] [Word] (Shape) Add snippets for textFrame and textWrap (#1015) * [Word] (TextFrame) Add snippet * Add samples for text wrap --- .../45-shapes/manage-shapes-text-boxes.yaml | 129 ++++++++++-- snippet-extractor-metadata/word.xlsx | Bin 28985 -> 29303 bytes snippet-extractor-output/snippets.yaml | 194 +++++++++++++++++- 3 files changed, 300 insertions(+), 23 deletions(-) diff --git a/samples/word/45-shapes/manage-shapes-text-boxes.yaml b/samples/word/45-shapes/manage-shapes-text-boxes.yaml index 42902ad03..8e143f438 100644 --- a/samples/word/45-shapes/manage-shapes-text-boxes.yaml +++ b/samples/word/45-shapes/manage-shapes-text-boxes.yaml @@ -11,9 +11,18 @@ script: document .getElementById("insert-text-box-into-current-selection") .addEventListener("click", () => tryCatch(insertTextBoxIntoCurrentSelection)); + document + .getElementById("get-text-wrap-of-text-box-in-main-doc") + .addEventListener("click", () => tryCatch(getTextWrapOfTextBoxInMainDoc)); + document + .getElementById("set-text-wrap-of-text-box-in-main-doc") + .addEventListener("click", () => tryCatch(setTextWrapPropertiesOfTextBoxInMainDoc)); document .getElementById("get-text-from-text-box-in-main-doc") .addEventListener("click", () => tryCatch(getTextFromTextBoxInMainDoc)); + document + .getElementById("get-text-frame-of-text-box-in-main-doc") + .addEventListener("click", () => tryCatch(getTextFrameOfTextBoxInMainDoc)); document.getElementById("get-text-boxes-in-main-doc").addEventListener("click", () => tryCatch(getTextBoxesInMainDoc)); document.getElementById("set-text-box-properties").addEventListener("click", () => tryCatch(setTextBoxProperties)); document @@ -30,6 +39,7 @@ 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) => { @@ -49,9 +59,48 @@ script: }); } + async function getTextWrapOfTextBoxInMainDoc() { + await Word.run(async (context) => { + // Gets text wrap properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textWrap"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + console.log("Text wrap properties of first text box:", shape.textWrap); + }); + } + + async function setTextWrapPropertiesOfTextBoxInMainDoc() { + await Word.run(async (context) => { + // Sets the text wrap properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirstOrNullObject(); + firstShapeWithTextBox.load("textWrap"); + await context.sync(); + + if (firstShapeWithTextBox.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; + + textWrap.type = Word.ShapeTextWrapType.square; + textWrap.side = Word.ShapeTextWrapSide.both; + + console.log("The first text box's text wrap properties were updated:", textWrap); + }); + } + async function getTextFromTextBoxInMainDoc() { await Word.run(async (context) => { - // Gets text from first text box in main document. + // Gets text from the first text box in the main document. const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); shape.load("body/text"); await context.sync(); @@ -59,14 +108,30 @@ script: console.log( shape.isNullObject ? "No shapes with text boxes found in main document." - : `Text in first text box: ${shape.body.text}`, + : `Text in first text box: ${shape.body.text}` ); }); } + async function getTextFrameOfTextBoxInMainDoc() { + await Word.run(async (context) => { + // Gets the text frame of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + console.log("Text frame of first text box:", shape.textFrame); + }); + } + async function getTextBoxesInMainDoc() { await Word.run(async (context) => { - // Gets text boxes in main document. + // Gets text boxes in the main document. const shapes: Word.ShapeCollection = context.document.body.shapes; shapes.load(); await context.sync(); @@ -167,7 +232,7 @@ script: async function insertTextBoxInHeaderAtFirstParagraph() { await Word.run(async (context) => { - // Inserts a text box at the beginning of the first paragraph in header. + // Inserts a text box at the beginning of the first paragraph in the header. const headerFooterBody: Word.Body = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); headerFooterBody.load("paragraphs"); const firstParagraph: Word.Paragraph = headerFooterBody.paragraphs.getFirst(); @@ -187,7 +252,7 @@ script: async function getTextBoxInHeader() { await Word.run(async (context) => { - // Gets text boxes in header. + // Gets text boxes in the header. const shapes: Word.ShapeCollection = context.document.sections .getFirst() .getHeader(Word.HeaderFooterType.primary).shapes; @@ -206,6 +271,23 @@ 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 = @@ -228,39 +310,54 @@ template:

      This sample demonstrates how to work with shapes and text boxes.
      +
      +

      Set up

      + +

      Try it out

      Main document

      + Insert text box into current selection + + + +

      Header

      language: html diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 0785001fae8e2ee5a84a0fd38e0dfb20bb0da124..d08224f9c5452620cd2f37637d9a906ce8e42643 100644 GIT binary patch delta 19521 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
      &>T)679#F53`z(C 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 delta 19162 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 H00000F#dVf diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index de9e20842..e55ae8e35 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -20649,7 +20649,7 @@ Word.Body#shapes:member: await Word.run(async (context) => { - // Gets text boxes in main document. + // Gets text boxes in the main document. const shapes: Word.ShapeCollection = context.document.body.shapes; shapes.load(); await context.sync(); @@ -26463,7 +26463,7 @@ Word.Paragraph#insertTextBox:member(1): await Word.run(async (context) => { - // Inserts a text box at the beginning of the first paragraph in header. + // Inserts a text box at the beginning of the first paragraph in the header. const headerFooterBody: Word.Body = context.document.sections.getFirst().getHeader(Word.HeaderFooterType.primary); headerFooterBody.load("paragraphs"); const firstParagraph: Word.Paragraph = headerFooterBody.paragraphs.getFirst(); @@ -27855,6 +27855,44 @@ Word.Shape#body:member: console.log("New content control properties:", newControl); }); +Word.Shape#textFrame:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets the text frame of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + console.log("Text frame of first text box:", shape.textFrame); + }); +Word.Shape#textWrap:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets text wrap properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textWrap"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + console.log("Text wrap properties of first text box:", shape.textWrap); + }); Word.Shape#type:member: - >- // Link to full sample: @@ -27862,7 +27900,7 @@ Word.Shape#type:member: await Word.run(async (context) => { - // Gets text boxes in main document. + // Gets text boxes in the main document. const shapes: Word.ShapeCollection = context.document.body.shapes; shapes.load(); await context.sync(); @@ -27884,7 +27922,7 @@ Word.ShapeCollection:class: await Word.run(async (context) => { - // Gets text boxes in main document. + // Gets text boxes in the main document. const shapes: Word.ShapeCollection = context.document.body.shapes; shapes.load(); await context.sync(); @@ -27946,7 +27984,7 @@ Word.ShapeCollection#getFirstOrNullObject:member(1): await Word.run(async (context) => { - // Gets text from first text box in main document. + // Gets text from the first text box in the main document. const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); shape.load("body/text"); await context.sync(); @@ -27954,9 +27992,132 @@ Word.ShapeCollection#getFirstOrNullObject:member(1): console.log( shape.isNullObject ? "No shapes with text boxes found in main document." - : `Text in first text box: ${shape.body.text}`, + : `Text in first text box: ${shape.body.text}` ); }); +Word.ShapeTextWrap:class: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets text wrap properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textWrap"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + console.log("Text wrap properties of first text box:", shape.textWrap); + }); +Word.ShapeTextWrap#side:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets the text wrap properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirstOrNullObject(); + firstShapeWithTextBox.load("textWrap"); + await context.sync(); + + if (firstShapeWithTextBox.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; + + textWrap.type = Word.ShapeTextWrapType.square; + textWrap.side = Word.ShapeTextWrapSide.both; + + console.log("The first text box's text wrap properties were updated:", textWrap); + }); +Word.ShapeTextWrap#type:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets the text wrap properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirstOrNullObject(); + firstShapeWithTextBox.load("textWrap"); + await context.sync(); + + if (firstShapeWithTextBox.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; + + textWrap.type = Word.ShapeTextWrapType.square; + textWrap.side = Word.ShapeTextWrapSide.both; + + console.log("The first text box's text wrap properties were updated:", textWrap); + }); +Word.ShapeTextWrapSide:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets the text wrap properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirstOrNullObject(); + firstShapeWithTextBox.load("textWrap"); + await context.sync(); + + if (firstShapeWithTextBox.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; + + textWrap.type = Word.ShapeTextWrapType.square; + textWrap.side = Word.ShapeTextWrapSide.both; + + console.log("The first text box's text wrap properties were updated:", textWrap); + }); +Word.ShapeTextWrapType:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets the text wrap properties of the first text box. + const firstShapeWithTextBox: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.textBox]) + .getFirstOrNullObject(); + firstShapeWithTextBox.load("textWrap"); + await context.sync(); + + if (firstShapeWithTextBox.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; + + textWrap.type = Word.ShapeTextWrapType.square; + textWrap.side = Word.ShapeTextWrapSide.both; + + console.log("The first text box's text wrap properties were updated:", textWrap); + }); Word.ShapeType:enum: - >- // Link to full sample: @@ -27964,7 +28125,7 @@ Word.ShapeType:enum: await Word.run(async (context) => { - // Gets text boxes in main document. + // Gets text boxes in the main document. const shapes: Word.ShapeCollection = context.document.body.shapes; shapes.load(); await context.sync(); @@ -28816,6 +28977,25 @@ Word.TableStyle:class: (document.getElementById("right-cell-margin") as HTMLInputElement).value = tableStyle.rightCellMargin; (document.getElementById("cell-spacing") as HTMLInputElement).value = tableStyle.cellSpacing; }); +Word.TextFrame:class: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Gets the text frame of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + console.log("Text frame of first text box:", shape.textFrame); + }); Word.TrackedChange:class: - >- // Link to full sample: From 8e37f6611bfb2215c3e78746e8805a4a83d5395b Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 24 Oct 2025 14:13:16 -0700 Subject: [PATCH 326/336] [Word] (TextFrame) Add snippet using properties (#1016) --- .../45-shapes/manage-shapes-text-boxes.yaml | 133 ++++++++------ snippet-extractor-metadata/word.xlsx | Bin 29303 -> 29543 bytes snippet-extractor-output/snippets.yaml | 168 +++++++++++++++++- 3 files changed, 243 insertions(+), 58 deletions(-) diff --git a/samples/word/45-shapes/manage-shapes-text-boxes.yaml b/samples/word/45-shapes/manage-shapes-text-boxes.yaml index 8e143f438..52c4599ee 100644 --- a/samples/word/45-shapes/manage-shapes-text-boxes.yaml +++ b/samples/word/45-shapes/manage-shapes-text-boxes.yaml @@ -11,20 +11,23 @@ script: 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("get-text-wrap-of-text-box-in-main-doc") .addEventListener("click", () => tryCatch(getTextWrapOfTextBoxInMainDoc)); document .getElementById("set-text-wrap-of-text-box-in-main-doc") .addEventListener("click", () => tryCatch(setTextWrapPropertiesOfTextBoxInMainDoc)); - document - .getElementById("get-text-from-text-box-in-main-doc") - .addEventListener("click", () => tryCatch(getTextFromTextBoxInMainDoc)); document .getElementById("get-text-frame-of-text-box-in-main-doc") .addEventListener("click", () => tryCatch(getTextFrameOfTextBoxInMainDoc)); - document.getElementById("get-text-boxes-in-main-doc").addEventListener("click", () => tryCatch(getTextBoxesInMainDoc)); + document + .getElementById("set-text-frame-of-text-box-in-main-doc") + .addEventListener("click", () => tryCatch(setTextFramePropertiesOfTextBoxInMainDoc)); document.getElementById("set-text-box-properties").addEventListener("click", () => tryCatch(setTextBoxProperties)); + document + .getElementById("get-text-from-text-box-in-main-doc") + .addEventListener("click", () => tryCatch(getTextFromTextBoxInMainDoc)); document .getElementById("insert-content-control-into-text-box") .addEventListener("click", () => tryCatch(insertContentControlIntoTextBox)); @@ -38,7 +41,7 @@ script: 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("get-text-boxes-in-header").addEventListener("click", () => tryCatch(getTextBoxesInHeader)); document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); async function insertTextBoxIntoCurrentSelection() { @@ -59,6 +62,28 @@ script: }); } + async function getTextBoxesInMainDoc() { + await Word.run(async (context) => { + // Gets text boxes in the main document. + const shapes: Word.ShapeCollection = context.document.body.shapes; + shapes.load(); + await context.sync(); + + if (shapes.items.length > 0) { + console.log(`Number of shapes found in the main document: ${shapes.items.length}`); + 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(`Shape ${index} in the main document doesn't have a text box.`); + } + }); + } else { + console.log("No shapes found in main document."); + } + }); + } + async function getTextWrapOfTextBoxInMainDoc() { await Word.run(async (context) => { // Gets text wrap properties of the first text box in the main document. @@ -77,7 +102,7 @@ script: async function setTextWrapPropertiesOfTextBoxInMainDoc() { await Word.run(async (context) => { - // Sets the text wrap properties of the first text box. + // Sets text wrap properties of the first text box. const firstShapeWithTextBox: Word.Shape = context.document.body.shapes .getByTypes([Word.ShapeType.textBox]) .getFirstOrNullObject(); @@ -90,7 +115,6 @@ script: } const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; - textWrap.type = Word.ShapeTextWrapType.square; textWrap.side = Word.ShapeTextWrapSide.both; @@ -98,21 +122,6 @@ script: }); } - async function getTextFromTextBoxInMainDoc() { - await Word.run(async (context) => { - // Gets text from the first text box in the 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 getTextFrameOfTextBoxInMainDoc() { await Word.run(async (context) => { // Gets the text frame of the first text box in the main document. @@ -129,22 +138,24 @@ script: }); } - async function getTextBoxesInMainDoc() { + async function setTextFramePropertiesOfTextBoxInMainDoc() { await Word.run(async (context) => { - // Gets text boxes in the main document. - const shapes: Word.ShapeCollection = context.document.body.shapes; - shapes.load(); + // Sets text frame properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); 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."); + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; } + + const textFrame: Word.TextFrame = shape.textFrame; + textFrame.verticalAlignment = Word.ShapeTextVerticalAlignment.bottom; + textFrame.orientation = Word.ShapeTextOrientation.vertical270; + textFrame.autoSizeSetting = Word.ShapeAutoSize.shapeToFitText; + + console.log("The first text box's text frame properties were updated:", textFrame); }); } @@ -164,6 +175,21 @@ script: }); } + async function getTextFromTextBoxInMainDoc() { + await Word.run(async (context) => { + // Gets text from the first text box in the 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 insertContentControlIntoTextBox() { await Word.run(async (context) => { // Inserts a content control into the first paragraph in the first text box. @@ -195,7 +221,7 @@ script: contentControlsInTextBox.load(); await context.sync(); - console.log(`There are ${contentControlsInTextBox.items.length} content controls in total.`); + console.log(`Number of content controls: ${contentControlsInTextBox.items.length}`); }); } @@ -250,7 +276,7 @@ script: }); } - async function getTextBoxInHeader() { + async function getTextBoxesInHeader() { await Word.run(async (context) => { // Gets text boxes in the header. const shapes: Word.ShapeCollection = context.document.sections @@ -260,9 +286,12 @@ script: await context.sync(); if (shapes.items.length > 0) { + console.log(`Number of shapes found in the header: ${shapes.items.length}`); shapes.items.forEach(function (shape, index) { if (shape.type === Word.ShapeType.textBox) { - console.log(`Shape ${index} in header has a text box. Properties:`, shape); + console.log(`Shape ${index} in the header has a text box. Properties:`, shape); + } else { + console.log(`Shape ${index} in the header doesn't have a text box.`); } }); } else { @@ -322,41 +351,45 @@ template: + +

      The following buttons act on the first text box in the main document.

      - - +

      Header

      -
      diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index d08224f9c5452620cd2f37637d9a906ce8e42643..488e758f71e85ec4ab9e7b10ee247f284350b98a 100644 GIT binary patch delta 21434 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index e55ae8e35..88c2f8671 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -20655,9 +20655,12 @@ Word.Body#shapes:member: await context.sync(); if (shapes.items.length > 0) { + console.log(`Number of shapes found in the main document: ${shapes.items.length}`); 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(`Shape ${index} in the main document doesn't have a text box.`); } }); } else { @@ -27906,15 +27909,42 @@ Word.Shape#type:member: await context.sync(); if (shapes.items.length > 0) { + console.log(`Number of shapes found in the main document: ${shapes.items.length}`); 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(`Shape ${index} in the main document doesn't have a text box.`); } }); } else { console.log("No shapes found in main document."); } }); +Word.ShapeAutoSize:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets text frame properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textFrame: Word.TextFrame = shape.textFrame; + textFrame.verticalAlignment = Word.ShapeTextVerticalAlignment.bottom; + textFrame.orientation = Word.ShapeTextOrientation.vertical270; + textFrame.autoSizeSetting = Word.ShapeAutoSize.shapeToFitText; + + console.log("The first text box's text frame properties were updated:", textFrame); + }); Word.ShapeCollection:class: - >- // Link to full sample: @@ -27928,9 +27958,12 @@ Word.ShapeCollection:class: await context.sync(); if (shapes.items.length > 0) { + console.log(`Number of shapes found in the main document: ${shapes.items.length}`); 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(`Shape ${index} in the main document doesn't have a text box.`); } }); } else { @@ -27995,6 +28028,54 @@ Word.ShapeCollection#getFirstOrNullObject:member(1): : `Text in first text box: ${shape.body.text}` ); }); +Word.ShapeTextOrientation:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets text frame properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textFrame: Word.TextFrame = shape.textFrame; + textFrame.verticalAlignment = Word.ShapeTextVerticalAlignment.bottom; + textFrame.orientation = Word.ShapeTextOrientation.vertical270; + textFrame.autoSizeSetting = Word.ShapeAutoSize.shapeToFitText; + + console.log("The first text box's text frame properties were updated:", textFrame); + }); +Word.ShapeTextVerticalAlignment:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets text frame properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textFrame: Word.TextFrame = shape.textFrame; + textFrame.verticalAlignment = Word.ShapeTextVerticalAlignment.bottom; + textFrame.orientation = Word.ShapeTextOrientation.vertical270; + textFrame.autoSizeSetting = Word.ShapeAutoSize.shapeToFitText; + + console.log("The first text box's text frame properties were updated:", textFrame); + }); Word.ShapeTextWrap:class: - >- // Link to full sample: @@ -28021,7 +28102,7 @@ Word.ShapeTextWrap#side:member: await Word.run(async (context) => { - // Sets the text wrap properties of the first text box. + // Sets text wrap properties of the first text box. const firstShapeWithTextBox: Word.Shape = context.document.body.shapes .getByTypes([Word.ShapeType.textBox]) .getFirstOrNullObject(); @@ -28034,7 +28115,6 @@ Word.ShapeTextWrap#side:member: } const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; - textWrap.type = Word.ShapeTextWrapType.square; textWrap.side = Word.ShapeTextWrapSide.both; @@ -28047,7 +28127,7 @@ Word.ShapeTextWrap#type:member: await Word.run(async (context) => { - // Sets the text wrap properties of the first text box. + // Sets text wrap properties of the first text box. const firstShapeWithTextBox: Word.Shape = context.document.body.shapes .getByTypes([Word.ShapeType.textBox]) .getFirstOrNullObject(); @@ -28060,7 +28140,6 @@ Word.ShapeTextWrap#type:member: } const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; - textWrap.type = Word.ShapeTextWrapType.square; textWrap.side = Word.ShapeTextWrapSide.both; @@ -28073,7 +28152,7 @@ Word.ShapeTextWrapSide:enum: await Word.run(async (context) => { - // Sets the text wrap properties of the first text box. + // Sets text wrap properties of the first text box. const firstShapeWithTextBox: Word.Shape = context.document.body.shapes .getByTypes([Word.ShapeType.textBox]) .getFirstOrNullObject(); @@ -28086,7 +28165,6 @@ Word.ShapeTextWrapSide:enum: } const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; - textWrap.type = Word.ShapeTextWrapType.square; textWrap.side = Word.ShapeTextWrapSide.both; @@ -28099,7 +28177,7 @@ Word.ShapeTextWrapType:enum: await Word.run(async (context) => { - // Sets the text wrap properties of the first text box. + // Sets text wrap properties of the first text box. const firstShapeWithTextBox: Word.Shape = context.document.body.shapes .getByTypes([Word.ShapeType.textBox]) .getFirstOrNullObject(); @@ -28112,7 +28190,6 @@ Word.ShapeTextWrapType:enum: } const textWrap: Word.ShapeTextWrap = firstShapeWithTextBox.textWrap; - textWrap.type = Word.ShapeTextWrapType.square; textWrap.side = Word.ShapeTextWrapSide.both; @@ -28131,9 +28208,12 @@ Word.ShapeType:enum: await context.sync(); if (shapes.items.length > 0) { + console.log(`Number of shapes found in the main document: ${shapes.items.length}`); 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(`Shape ${index} in the main document doesn't have a text box.`); } }); } else { @@ -28996,6 +29076,78 @@ Word.TextFrame:class: console.log("Text frame of first text box:", shape.textFrame); }); +Word.TextFrame#autoSizeSetting:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets text frame properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textFrame: Word.TextFrame = shape.textFrame; + textFrame.verticalAlignment = Word.ShapeTextVerticalAlignment.bottom; + textFrame.orientation = Word.ShapeTextOrientation.vertical270; + textFrame.autoSizeSetting = Word.ShapeAutoSize.shapeToFitText; + + console.log("The first text box's text frame properties were updated:", textFrame); + }); +Word.TextFrame#orientation:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets text frame properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textFrame: Word.TextFrame = shape.textFrame; + textFrame.verticalAlignment = Word.ShapeTextVerticalAlignment.bottom; + textFrame.orientation = Word.ShapeTextOrientation.vertical270; + textFrame.autoSizeSetting = Word.ShapeAutoSize.shapeToFitText; + + console.log("The first text box's text frame properties were updated:", textFrame); + }); +Word.TextFrame#verticalAlignment:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml + + + await Word.run(async (context) => { + // Sets text frame properties of the first text box in the main document. + const shape: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.textBox]).getFirstOrNullObject(); + shape.load("textFrame"); + await context.sync(); + + if (shape.isNullObject) { + console.log("No shapes with text boxes found in main document."); + return; + } + + const textFrame: Word.TextFrame = shape.textFrame; + textFrame.verticalAlignment = Word.ShapeTextVerticalAlignment.bottom; + textFrame.orientation = Word.ShapeTextOrientation.vertical270; + textFrame.autoSizeSetting = Word.ShapeAutoSize.shapeToFitText; + + console.log("The first text box's text frame properties were updated:", textFrame); + }); Word.TrackedChange:class: - >- // Link to full sample: From e2c8bab6917bb29861bb2a445f000e0c8869dd0d Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Mon, 27 Oct 2025 11:32:12 -0700 Subject: [PATCH 327/336] [Outlook] Update and map appointment date snippets (#1018) [Outlook] Update and map appointment date snippets --- .../90-other-item-apis/get-end-read.yaml | 21 +++-- .../get-set-end-appointment-organizer.yaml | 33 ++++++-- .../get-set-start-appointment-organizer.yaml | 31 ++++++-- .../90-other-item-apis/get-start-read.yaml | 23 ++++-- snippet-extractor-metadata/outlook.xlsx | Bin 24911 -> 24859 bytes snippet-extractor-output/snippets.yaml | 73 ++++++++++++++++-- 6 files changed, 150 insertions(+), 31 deletions(-) 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 e66f3af01..6375abab8 100644 --- a/samples/outlook/90-other-item-apis/get-end-read.yaml +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -7,10 +7,18 @@ api_set: Mailbox: '1.1' script: content: |- - document.getElementById("get").addEventListener("click", get); + document.getElementById("get-utc").addEventListener("click", getUtc); + document.getElementById("get-local").addEventListener("click", getLocal); - function get() { - console.log(`Appointment ends: ${Office.context.mailbox.item.end}`); + function getUtc() { + const time = Office.context.mailbox.item.end; + console.log(`Appointment ends (UTC): ${time.toUTCString()}`); + } + + function getLocal() { + const time = Office.context.mailbox.item.end; + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + console.log(`Appointment ends (local): ${localTime.month + 1}/${localTime.date}/${localTime.year}, ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); } language: typescript template: @@ -22,8 +30,11 @@ template:

      Try it out

      +
      Get end date and time (UTC)
      + +
      language: html style: 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 22f02f686..4e8340ca6 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,16 +7,32 @@ api_set: Mailbox: '1.1' script: content: |- - document.getElementById("get").addEventListener("click", get); + document.getElementById("get-utc").addEventListener("click", getUtc); + document.getElementById("get-local").addEventListener("click", getLocal); document.getElementById("set").addEventListener("click", set); - function get() { + function getUtc() { Office.context.mailbox.item.end.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Appointment ends: ${result.value}`); + + const time = result.value; + console.log(`Appointment ends (UTC): ${time.toUTCString()}`); + }); + } + + function getLocal() { + Office.context.mailbox.item.end.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + + const time = result.value; + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + console.log(`Appointment ends (local): ${localTime.month + 1}/${localTime.date}/${localTime.year}, ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); }); } @@ -50,9 +66,12 @@ template: - + +
      language: html style: @@ -73,4 +92,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/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 d58d33125..ef459d16c 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,16 +7,32 @@ api_set: Mailbox: '1.1' script: content: |- - document.getElementById("get").addEventListener("click", get); + document.getElementById("get-utc").addEventListener("click", getUtc); + document.getElementById("get-local").addEventListener("click", getLocal); document.getElementById("set").addEventListener("click", set); - function get() { + function getUtc() { Office.context.mailbox.item.start.getAsync((result) => { if (result.status !== Office.AsyncResultStatus.Succeeded) { console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Appointment starts: ${result.value}`); + + const time = result.value; + console.log(`Appointment starts (UTC): ${time.toUTCString()}`); + }); + } + + function getLocal() { + Office.context.mailbox.item.start.getAsync((result) => { + if (result.status !== Office.AsyncResultStatus.Succeeded) { + console.error(`Action failed with message ${result.error.message}`); + return; + } + + const time = result.value; + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + console.log(`Appointment starts (local): ${localTime.month + 1}/${localTime.date}/${localTime.year}, ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); }); } @@ -43,9 +59,12 @@ template: - + +
      language: html style: 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 bc2cd169c..541f6c56e 100644 --- a/samples/outlook/90-other-item-apis/get-start-read.yaml +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -7,10 +7,18 @@ api_set: Mailbox: '1.1' script: content: |- - document.getElementById("get").addEventListener("click", get); + document.getElementById("get-utc").addEventListener("click", getUtc); + document.getElementById("get-local").addEventListener("click", getLocal); - function get() { - console.log(`Appointment starts: ${Office.context.mailbox.item.start}`); + function getUtc() { + const time = Office.context.mailbox.item.start; + console.log(`Appointment starts (UTC): ${time.toUTCString()}`); + } + + function getLocal() { + const time = Office.context.mailbox.item.start; + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + console.log(`Appointment starts (local): ${localTime.month + 1}/${localTime.date}/${localTime.year}, ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); } language: typescript template: @@ -21,9 +29,12 @@ template:

      Try it out

      - + +
      language: html style: diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index e7f1f77f9fe9522c869744307241f6df58739e6f..1a249f8e395347a59c6ebb66082a4e9759f92f9f 100644 GIT binary patch delta 14713 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 delta 14813 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
      9d%q3Z3q0z0=erbX~I|RcHM?ynd@R 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 88c2f8671..e855c62cc 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -9330,7 +9330,10 @@ Office.AppointmentCompose#end:member: console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Appointment ends: ${result.value}`); + + const time = result.value; + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + console.log(`Appointment ends (local): ${localTime.month + 1}/${localTime.date}/${localTime.year}, ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); }); - >- // Link to full sample: @@ -10062,7 +10065,10 @@ Office.AppointmentCompose#start:member: console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Appointment starts: ${result.value}`); + + const time = result.value; + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + console.log(`Appointment starts (local): ${localTime.month + 1}/${localTime.date}/${localTime.year}, ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); }); - >- // Link to full sample: @@ -10448,7 +10454,13 @@ Office.AppointmentRead#end:member: 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}`); + const time = Office.context.mailbox.item.end; + + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + + console.log(`Appointment ends (local): ${localTime.month + + 1}/${localTime.date}/${localTime.year}, + ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); Office.AppointmentRead#enhancedLocation:member: - >- // Link to full sample: @@ -10786,7 +10798,13 @@ Office.AppointmentRead#start:member: 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}`); + const time = Office.context.mailbox.item.start; + + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + + console.log(`Appointment starts (local): ${localTime.month + + 1}/${localTime.date}/${localTime.year}, + ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); Office.AppointmentRead#subject:member: - >- // Link to full sample: @@ -11845,6 +11863,19 @@ Office.Item:interface: console.log(`Current item is a ${itemType}. A message could be an email, meeting request, meeting response, or meeting cancellation.`); break; } +Office.LocalClientTime:interface: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml + + + const time = Office.context.mailbox.item.start; + + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + + console.log(`Appointment starts (local): ${localTime.month + + 1}/${localTime.date}/${localTime.year}, + ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); Office.Location#getAsync:member(2): - >- // Link to full sample: @@ -11902,6 +11933,19 @@ Office.Mailbox#convertToEwsId:member(1): Office.MailboxEnums.RestVersion.v2_0); console.log("EWS ID (from REST ID): " + ewsId2); +Office.Mailbox#convertToLocalClientTime:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/outlook/90-other-item-apis/get-start-read.yaml + + + const time = Office.context.mailbox.item.start; + + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + + console.log(`Appointment starts (local): ${localTime.month + + 1}/${localTime.date}/${localTime.year}, + ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); Office.Mailbox#convertToRestId:member(1): - >- // Link to full sample: @@ -14324,7 +14368,13 @@ Office.MessageRead#end:member: 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}`); + const time = Office.context.mailbox.item.end; + + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + + console.log(`Appointment ends (local): ${localTime.month + + 1}/${localTime.date}/${localTime.year}, + ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); Office.MessageRead#from:member: - >- // Link to full sample: @@ -14659,7 +14709,13 @@ Office.MessageRead#start:member: 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}`); + const time = Office.context.mailbox.item.start; + + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + + console.log(`Appointment starts (local): ${localTime.month + + 1}/${localTime.date}/${localTime.year}, + ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); Office.MessageRead#subject:member: - >- // Link to full sample: @@ -15567,7 +15623,10 @@ Office.Time#getAsync:member(2): console.error(`Action failed with message ${result.error.message}`); return; } - console.log(`Appointment starts: ${result.value}`); + + const time = result.value; + const localTime = Office.context.mailbox.convertToLocalClientTime(time); + console.log(`Appointment starts (local): ${localTime.month + 1}/${localTime.date}/${localTime.year}, ${localTime.hours}:${localTime.minutes}:${localTime.seconds}`); }); Office.Time#setAsync:member(1): - >- From 14b4a0247e2d262555053eeb5b9308dd3883d6d3 Mon Sep 17 00:00:00 2001 From: Sam Ramon <15154970+samantharamon@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:05:39 -0700 Subject: [PATCH 328/336] [Outlook] Map snippet to AppointmentForm interface (#1019) --- snippet-extractor-metadata/outlook.xlsx | Bin 24859 -> 24845 bytes snippet-extractor-output/snippets.yaml | 32 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/snippet-extractor-metadata/outlook.xlsx b/snippet-extractor-metadata/outlook.xlsx index 1a249f8e395347a59c6ebb66082a4e9759f92f9f..769da162aae388b15b9d6d4b7caa5e163413bdca 100644 GIT binary patch delta 13546 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 M3@EP*|9Rs70Kkc`g8%>k delta 13514 zcmY+rWl$Ym6EzCKgC#h@-CYh&@Nj?-+}+(>CJ-b93l5= zzWVO`n3}4d?mc_;n$^9h_C$BVr+2|urJ*2MdElYEOUOnc1q_rIIPn6q>t5d7iS~S6 zuZv*(WAgzM?cE#X*a2Fs`cLZvF4inPz>3E_o_0~OsZ?*pNqy{CGsW@QUI}wKVTCT$ z0UEU&kxtvFIs1MQ+PzQuyqS4@+O!~x1(d-Ws^{)|{|VtJ1=*dHfX%@THUH$`j_g03>@mzzZK|PaK5z+O3<6$wz+>Qduy{I+lJ zAIGc_!KIZ+sKGZfye%8sxd|JRiI0wIEd+LH3Yw{kNdwF}r8~|4M6!RsXWfbixc^i{ z2&)9cFax+HM+Yl1Die{a(n?wA47D4=vOa2#qR%AV6M+4i-W^K3YnjS0D7Hp@Nzx?n z7grb!>H;wR;3X-AS7r`~7eBRy3#q;L@g_4{FRZ1k{>D_;pnN(IWA@|7CoTWN8|)9t zfJls}zq5$<@U5P<{mn3dV&YeU-ta*LQ7&^}#inijDBEFsC9Lztax+Cb>~W8fz_wSU+l8Q4+xI|wOPwHh}}9mO(}&Y0~hdP<2o!W!m| zDprDfTw&jcS$ICxq~5!SAhzbrb!y$WO+VRtfZ-(8H}+7&A<;YJwAL7i{g9n`9&wi) zcV0kwn~M*P8{7C&JPV$YPBL%Jf{&F@aZj(e#>zXk(&v3G0kbU)>TMt`$)rn^DDFUF zK7ATd3Dc=VT0S{hoH>8dp0Ey0$E_)DOy)DMRg2oG9bEo{hk2j7-4bzRv`Koga;1)Y z=H*hY;8SBX=r?2&#qskA)}labTT}b4-3C_dn+&nPmWRV##1pRP=n3$McnJ&oShYKE z>E2+;_R7w{=;7d;=-}aq;1a|QJ^&es22S&wcwr|DN8;KLh80@GIL$gdhY9u)4+>bH zAbhEO#$4gw!lxTD;ULcvUW=r!8v;8bI{{Cf>-V!$n`nsyHEh8KjBvVPoQsdd0JavMc?ZCK;sofz*$EJN%B%8bz|sboFIX;pQE%$N9kH z9kC6<3A>j(PLp*OZyZmAY!zU9fi`p!oy9k-*D0icFvWnKZzZzkcZa1!R)6P_ZB10J zeY|<;!k}xjB0UIH%W1G&e(YFy=j2<@h;&@#A%mxmWDs`YL0UM~q1%Lesq|N(g9x{q zANvae=&OMw_z-^S)15W0_`3Snk(m0ApRvgtYlpdN9uSk7Lt7fix-tNqzG&}YKSkDE z*$*@%>1*skoyFk6?0-V|6{*u!#Q?+2Px4kQ+`39YfbbZe?UoRmqu)y0&dcT)pDD-m zVc!2&I5uU2FpKXG1)H(;Hj(m=Zf%Ix(8xkfoMb-g(`4SRWlNEs!�nMktnCP_p!- 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index e855c62cc..9d7465e64 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -10113,6 +10113,38 @@ Office.AppointmentCompose#subject:member: } console.log(`Successfully set subject to ${subject}`); }); +Office.AppointmentForm:interface: + - >- + // 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(); + + end.setHours(start.getHours() + 1); + + + // The async version is only available starting with requirement set 1.9, + + // and provides a callback when the new appointment form has been created. + + Office.context.mailbox.displayNewAppointmentFormAsync( + { + requiredAttendees: ["bob@contoso.com"], + optionalAttendees: ["sam@contoso.com"], + start: start, + end: end, + location: "Home", + subject: "meeting", + resources: ["projector@contoso.com"], + body: "Hello World!" + }, + function(asyncResult) { + console.log(JSON.stringify(asyncResult)); + } + ); Office.AppointmentRead#attachments:member: - >- // Link to full sample: From 0679d3aa9bb6eb7a2aea6899448281ed8d4c57a6 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 31 Oct 2025 13:55:57 -0700 Subject: [PATCH 329/336] [Word] (shapes) Add snippet for geometric shapes (#1020) * [Word] (shapes) Add snippet for geometric shapes * Updates based on feedback --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + .../45-shapes/manage-geometric-shapes.yaml | 168 ++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 29543 -> 29772 bytes snippet-extractor-output/snippets.yaml | 77 ++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 265 insertions(+) create mode 100644 samples/word/45-shapes/manage-geometric-shapes.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index 72fdf9972..e5cd4eddd 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -386,6 +386,15 @@ group: Shapes api_set: WordApiDesktop: '1.2' +- id: word-shapes-manage-geometric-shapes + name: Manage geometric shapes + fileName: manage-geometric-shapes.yaml + description: Shows how to work with geometric shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 1d848fb05..9f74b63c2 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -386,6 +386,15 @@ group: Shapes api_set: WordApiDesktop: '1.2' +- id: word-shapes-manage-geometric-shapes + name: Manage geometric shapes + fileName: manage-geometric-shapes.yaml + description: Shows how to work with geometric shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-geometric-shapes.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml diff --git a/samples/word/45-shapes/manage-geometric-shapes.yaml b/samples/word/45-shapes/manage-geometric-shapes.yaml new file mode 100644 index 000000000..10849e122 --- /dev/null +++ b/samples/word/45-shapes/manage-geometric-shapes.yaml @@ -0,0 +1,168 @@ +order: 2 +id: word-shapes-manage-geometric-shapes +name: Manage geometric shapes +description: Shows how to work with geometric shapes. +host: WORD +api_set: + WordApiDesktop: '1.2' +script: + content: | + document.getElementById("insert-heptagon").addEventListener("click", () => tryCatch(insertGeometricShape_Heptagon)); + document.getElementById("insert-moon").addEventListener("click", () => tryCatch(insertGeometricShape_Moon)); + document.getElementById("get-geometric-shapes").addEventListener("click", () => tryCatch(getGeometricShapes)); + document.getElementById("get-moons").addEventListener("click", () => tryCatch(getMoonGeometricShapes)); + document.getElementById("get-first-geometric-shape").addEventListener("click", () => tryCatch(getFirstGeometricShape)); + document.getElementById("get-first-heptagon").addEventListener("click", () => tryCatch(getFirstHeptagon)); + + async function insertGeometricShape_Heptagon() { + await Word.run(async (context) => { + // Inserts a heptagon geometric shape at the beginning of the selection. + const selection: Word.Range = context.document.getSelection(); + const shapeOptions: Word.InsertShapeOptions = { + height: 120, + width: 120, + }; + selection.insertGeometricShape(Word.GeometricShapeType.heptagon, shapeOptions); + await context.sync(); + + console.log("Inserted a heptagon."); + }); + } + + async function insertGeometricShape_Moon() { + await Word.run(async (context) => { + // Inserts a moon geometric shape at the beginning of the selection. + const selection: Word.Range = context.document.getSelection(); + const shapeOptions: Word.InsertShapeOptions = { + height: 120, + width: 120, + left: 120, + }; + selection.insertGeometricShape(Word.GeometricShapeType.moon, shapeOptions); + await context.sync(); + + console.log("Inserted a heptagon."); + }); + } + + async function getGeometricShapes() { + await Word.run(async (context) => { + // Gets the geometric shapes from the document body. + const geometricShapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ + Word.ShapeType.geometricShape, + ]); + geometricShapes.load(); + await context.sync(); + + console.log("Geometric shapes found in the document body:", geometricShapes); + }); + } + + async function getMoonGeometricShapes() { + await Word.run(async (context) => { + // Gets the moon geometric shapes from the document body. + const moons: Word.ShapeCollection = context.document.body.shapes.getByGeometricTypes([ + Word.GeometricShapeType.moon, + ]); + moons.load(); + await context.sync(); + + console.log("Moons found in the document body:", moons); + }); + } + + async function getFirstGeometricShape() { + await Word.run(async (context) => { + // Gets the first geometric shape found in the document body. + const geometricShape: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.geometricShape]) + .getFirstOrNullObject(); + geometricShape.load(); + await context.sync(); + + if (geometricShape.isNullObject) { + console.log("No geometric shapes found in the document body."); + return; + } + + console.log( + `First geometric shape found in the document body is of type ${geometricShape.geometricShapeType}:`, + geometricShape, + ); + }); + } + + async function getFirstHeptagon() { + await Word.run(async (context) => { + // Gets the first heptagon found in the document body. + const heptagon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.heptagon]) + .getFirstOrNullObject(); + heptagon.load(); + await context.sync(); + + if (heptagon.isNullObject) { + console.log("No heptagons found in the document body."); + return; + } + + console.log("First heptagon found in the document body:", heptagon); + }); + } + + // 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 geometric shapes. +
      +
      +

      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 488e758f71e85ec4ab9e7b10ee247f284350b98a..a957c35e13d5fa9dbb3535253393fd0bdf593c62 100644 GIT binary patch delta 21456 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 delta 21170 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 bmj$R3qTJAH0jh*ro@m}cK@ta_|0($w^K44> diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 9d7465e64..605c240b1 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -25098,6 +25098,24 @@ Word.FieldType:enum: console.log("Code of the field: " + field.code, "Result of the field: " + JSON.stringify(field.result)); } }); +Word.GeometricShapeType:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Inserts a heptagon geometric shape at the beginning of the selection. + const selection: Word.Range = context.document.getSelection(); + const shapeOptions: Word.InsertShapeOptions = { + height: 120, + width: 120, + }; + selection.insertGeometricShape(Word.GeometricShapeType.heptagon, shapeOptions); + await context.sync(); + + console.log("Inserted a heptagon."); + }); Word.GetTextOptions:interface: - >- // Link to full sample: @@ -27448,6 +27466,25 @@ Word.Range#insertInlinePictureFromBase64:member(1): const pictureBase64 = "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"; return pictureBase64; +Word.Range#insertGeometricShape:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Inserts a moon geometric shape at the beginning of the selection. + const selection: Word.Range = context.document.getSelection(); + const shapeOptions: Word.InsertShapeOptions = { + height: 120, + width: 120, + left: 120, + }; + selection.insertGeometricShape(Word.GeometricShapeType.moon, shapeOptions); + await context.sync(); + + console.log("Inserted a heptagon."); + }); Word.Range#insertTextBox:member(1): - >- // Link to full sample: @@ -27949,6 +27986,30 @@ Word.Shape#body:member: console.log("New content control properties:", newControl); }); +Word.Shape#geometricShapeType:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Gets the first geometric shape found in the document body. + const geometricShape: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.geometricShape]) + .getFirstOrNullObject(); + geometricShape.load(); + await context.sync(); + + if (geometricShape.isNullObject) { + console.log("No geometric shapes found in the document body."); + return; + } + + console.log( + `First geometric shape found in the document body is of type ${geometricShape.geometricShapeType}:`, + geometricShape, + ); + }); Word.Shape#textFrame:member: - >- // Link to full sample: @@ -28061,6 +28122,22 @@ Word.ShapeCollection:class: console.log("No shapes found in main document."); } }); +Word.ShapeCollection#getByGeometricTypes:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Gets the moon geometric shapes from the document body. + const moons: Word.ShapeCollection = context.document.body.shapes.getByGeometricTypes([ + Word.GeometricShapeType.moon, + ]); + moons.load(); + await context.sync(); + + console.log("Moons found in the document body:", moons); + }); Word.ShapeCollection#getByTypes:member(1): - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index f91bdf5ba..f59473227 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -39,6 +39,7 @@ "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-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml", + "word-shapes-manage-geometric-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.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", diff --git a/view/word.json b/view/word.json index ebef6fc8f..4bbdae6fd 100644 --- a/view/word.json +++ b/view/word.json @@ -39,6 +39,7 @@ "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-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-shapes-text-boxes.yaml", + "word-shapes-manage-geometric-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-geometric-shapes.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", From 34f77c8ce1dc65293b38d97d7b71da1807790023 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 5 Nov 2025 13:01:55 -0800 Subject: [PATCH 330/336] [Word] (ShapeFill) Add snippet (#1021) * [Word] (ShapeFill) Add snippet * Fix typo --- .../45-shapes/manage-geometric-shapes.yaml | 31 ++++++- snippet-extractor-metadata/word.xlsx | Bin 29772 -> 29925 bytes snippet-extractor-output/snippets.yaml | 86 +++++++++++++++++- 3 files changed, 115 insertions(+), 2 deletions(-) diff --git a/samples/word/45-shapes/manage-geometric-shapes.yaml b/samples/word/45-shapes/manage-geometric-shapes.yaml index 10849e122..d94102664 100644 --- a/samples/word/45-shapes/manage-geometric-shapes.yaml +++ b/samples/word/45-shapes/manage-geometric-shapes.yaml @@ -13,6 +13,7 @@ script: document.getElementById("get-moons").addEventListener("click", () => tryCatch(getMoonGeometricShapes)); document.getElementById("get-first-geometric-shape").addEventListener("click", () => tryCatch(getFirstGeometricShape)); document.getElementById("get-first-heptagon").addEventListener("click", () => tryCatch(getFirstHeptagon)); + document.getElementById("get-first-moon-fill").addEventListener("click", () => tryCatch(getFirstMoonColorFill)); async function insertGeometricShape_Heptagon() { await Word.run(async (context) => { @@ -41,7 +42,7 @@ script: selection.insertGeometricShape(Word.GeometricShapeType.moon, shapeOptions); await context.sync(); - console.log("Inserted a heptagon."); + console.log("Inserted a moon."); }); } @@ -110,6 +111,31 @@ script: }); } + async function getFirstMoonColorFill() { + await Word.run(async (context) => { + // Gets the color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + const moonFillType = moonFill.type as Word.ShapeFillType; + + console.log("Color fill properties of the first moon found in the document body:"); + console.log(`\tForeground color: ${moonFill.foregroundColor}`); + console.log(`\tBackground color: ${moonFill.backgroundColor}`); + console.log(`\tTransparency: ${moonFill.transparency}`); + console.log(`\tFill type: ${moonFillType}`); + }); + } + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { @@ -145,6 +171,9 @@ template: +
      language: html style: diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index a957c35e13d5fa9dbb3535253393fd0bdf593c62..549f9dd01b616dc581faae3a17edbd14e9bc01b3 100644 GIT binary patch delta 21190 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 J3&{V0{0EVUL<#@^ delta 21044 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 diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 605c240b1..a2f49f4a4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -27483,7 +27483,7 @@ Word.Range#insertGeometricShape:member(1): selection.insertGeometricShape(Word.GeometricShapeType.moon, shapeOptions); await context.sync(); - console.log("Inserted a heptagon."); + console.log("Inserted a moon."); }); Word.Range#insertTextBox:member(1): - >- @@ -27986,6 +27986,34 @@ Word.Shape#body:member: console.log("New content control properties:", newControl); }); +Word.Shape#fill:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Gets the color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + const moonFillType = moonFill.type as Word.ShapeFillType; + + console.log("Color fill properties of the first moon found in the document body:"); + console.log(`\tForeground color: ${moonFill.foregroundColor}`); + console.log(`\tBackground color: ${moonFill.backgroundColor}`); + console.log(`\tTransparency: ${moonFill.transparency}`); + console.log(`\tFill type: ${moonFillType}`); + }); Word.Shape#geometricShapeType:member: - >- // Link to full sample: @@ -28196,6 +28224,62 @@ Word.ShapeCollection#getFirstOrNullObject:member(1): : `Text in first text box: ${shape.body.text}` ); }); +Word.ShapeFill:class: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Gets the color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + const moonFillType = moonFill.type as Word.ShapeFillType; + + console.log("Color fill properties of the first moon found in the document body:"); + console.log(`\tForeground color: ${moonFill.foregroundColor}`); + console.log(`\tBackground color: ${moonFill.backgroundColor}`); + console.log(`\tTransparency: ${moonFill.transparency}`); + console.log(`\tFill type: ${moonFillType}`); + }); +Word.ShapeFillType:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Gets the color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + const moonFillType = moonFill.type as Word.ShapeFillType; + + console.log("Color fill properties of the first moon found in the document body:"); + console.log(`\tForeground color: ${moonFill.foregroundColor}`); + console.log(`\tBackground color: ${moonFill.backgroundColor}`); + console.log(`\tTransparency: ${moonFill.transparency}`); + console.log(`\tFill type: ${moonFillType}`); + }); Word.ShapeTextOrientation:enum: - >- // Link to full sample: From 706a2d6bc0aad8c43ed26199e44c5c8a69f0532e Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 5 Nov 2025 13:40:32 -0800 Subject: [PATCH 331/336] [Word] (ShapeFill) Add snippet for clear and set (#1022) --- .../45-shapes/manage-geometric-shapes.yaml | 61 +++++++++++++++++- snippet-extractor-metadata/word.xlsx | Bin 29925 -> 30018 bytes snippet-extractor-output/snippets.yaml | 56 ++++++++++++++++ 3 files changed, 116 insertions(+), 1 deletion(-) diff --git a/samples/word/45-shapes/manage-geometric-shapes.yaml b/samples/word/45-shapes/manage-geometric-shapes.yaml index d94102664..20b86ab84 100644 --- a/samples/word/45-shapes/manage-geometric-shapes.yaml +++ b/samples/word/45-shapes/manage-geometric-shapes.yaml @@ -14,6 +14,8 @@ script: document.getElementById("get-first-geometric-shape").addEventListener("click", () => tryCatch(getFirstGeometricShape)); document.getElementById("get-first-heptagon").addEventListener("click", () => tryCatch(getFirstHeptagon)); document.getElementById("get-first-moon-fill").addEventListener("click", () => tryCatch(getFirstMoonColorFill)); + document.getElementById("clear-first-moon-fill").addEventListener("click", () => tryCatch(clearFirstMoonColorFill)); + document.getElementById("set-first-moon-fill").addEventListener("click", () => tryCatch(setFirstMoonColorFill)); async function insertGeometricShape_Heptagon() { await Word.run(async (context) => { @@ -136,6 +138,56 @@ script: }); } + async function clearFirstMoonColorFill() { + await Word.run(async (context) => { + // Clears the color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + console.log("Current fill properties of the first moon found in the document body:", moonFill); + + moonFill.clear(); + moonFill.load(); + await context.sync(); + + console.log("Cleared the color fill properties of the first moon found in the document body:", moonFill); + }); + } + + async function setFirstMoonColorFill() { + await Word.run(async (context) => { + // Sets color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + console.log("Current fill properties of the first moon found in the document body:", moonFill); + + moonFill.setSolidColor("green"); + moonFill.load(); + await context.sync(); + + console.log("Updated color fill properties of the first moon found in the document body:", moonFill); + }); + } + // Default helper for invoking an action and handling errors. async function tryCatch(callback) { try { @@ -171,8 +223,15 @@ template: +

      Work with color fill properties of the first moon

      + +
      language: html diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 549f9dd01b616dc581faae3a17edbd14e9bc01b3..996db188d4a630c7a7574c23037f39f9ae042498 100644 GIT binary patch delta 20028 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 YYC-Yfy+BPmAs?_cP#ms7{14*)0CWlsVE_OC delta 19851 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Sets color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + console.log("Current fill properties of the first moon found in the document body:", moonFill); + + moonFill.setSolidColor("green"); + moonFill.load(); + await context.sync(); + + console.log("Updated color fill properties of the first moon found in the document body:", moonFill); + }); +Word.ShapeFill#setSolidColor:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml + + + await Word.run(async (context) => { + // Sets color fill properties of the first moon found in the document body. + const moon: Word.Shape = context.document.body.shapes + .getByGeometricTypes([Word.GeometricShapeType.moon]) + .getFirstOrNullObject(); + moon.load("fill"); + await context.sync(); + + if (moon.isNullObject) { + console.log("No moons found in the document body."); + return; + } + + const moonFill: Word.ShapeFill = moon.fill; + console.log("Current fill properties of the first moon found in the document body:", moonFill); + + moonFill.setSolidColor("green"); + moonFill.load(); + await context.sync(); + + console.log("Updated color fill properties of the first moon found in the document body:", moonFill); + }); Word.ShapeFillType:enum: - >- // Link to full sample: From 7f9d7938f688867b379bd8d5245346b26891b404 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Wed, 5 Nov 2025 15:49:55 -0800 Subject: [PATCH 332/336] [Word] (ShapeGroup) Add snippet (#1023) * [Word] (ShapeGroup) Add snippet * Remove unneeded function * Additional mapping --- playlists-prod/word.yaml | 9 ++ playlists/word.yaml | 9 ++ samples/word/45-shapes/group-ungroup.yaml | 136 ++++++++++++++++++++ snippet-extractor-metadata/word.xlsx | Bin 30018 -> 30177 bytes snippet-extractor-output/snippets.yaml | 144 ++++++++++++++++++++++ view-prod/word.json | 1 + view/word.json | 1 + 7 files changed, 300 insertions(+) create mode 100644 samples/word/45-shapes/group-ungroup.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index e5cd4eddd..f4da6c600 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -395,6 +395,15 @@ group: Shapes api_set: WordApiDesktop: '1.2' +- id: word-shapes-group-ungroup + name: Group and ungroup shapes + fileName: group-ungroup.yaml + description: Shows how to group and ungroup shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 9f74b63c2..8964fdc82 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -395,6 +395,15 @@ group: Shapes api_set: WordApiDesktop: '1.2' +- id: word-shapes-group-ungroup + name: Group and ungroup shapes + fileName: group-ungroup.yaml + description: Shows how to group and ungroup shapes. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/group-ungroup.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml diff --git a/samples/word/45-shapes/group-ungroup.yaml b/samples/word/45-shapes/group-ungroup.yaml new file mode 100644 index 000000000..e8e177aef --- /dev/null +++ b/samples/word/45-shapes/group-ungroup.yaml @@ -0,0 +1,136 @@ +order: 3 +id: word-shapes-group-ungroup +name: Group and ungroup shapes +description: Shows how to group and ungroup shapes. +host: WORD +api_set: + WordApiDesktop: '1.2' +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 Word.run(async (context) => { + // Groups the shapes (including text boxes) found in the document body. + const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ + Word.ShapeType.geometricShape, + Word.ShapeType.textBox, + ]); + shapes.load("items"); + await context.sync(); + + const numShapes = shapes.items.length; + if (numShapes === 0) { + console.log("No shapes found in document body."); + return; + } + + console.log(`Number of shapes to group: ${numShapes}`); + + const groupedShape: Word.Shape = shapes.group(); + groupedShape.load("shapeGroup/shapes"); + await context.sync(); + + const shapeGroup: Word.ShapeGroup = groupedShape.shapeGroup; + console.log("Shapes grouped:", shapeGroup.shapes); + groupedShape.select(); + }); + } + + async function ungroupShapes() { + await Word.run(async (context) => { + // Ungroups the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.group]).getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to ungroup first shape group found in document body:", shapeGroup.shapes); + shapeGroup.ungroup(); + + console.log("Ungrouped first shape group."); + }); + } + + async function setup() { + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + body.clear(); + + // Inserts a text box. + const textBoxOptions: Word.InsertShapeOptions = { + top: 0, + left: 0, + height: 100, + width: 100, + }; + body.paragraphs.getLast().insertTextBox("placeholder text", textBoxOptions); + + // Inserts a geometric shape. + const geometricShapeOptions: Word.InsertShapeOptions = { + height: 120, + width: 120, + left: 120, + }; + body.paragraphs.getLast().insertGeometricShape(Word.GeometricShapeType.star24, geometricShapeOptions); + 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 group and 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; + } + 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 996db188d4a630c7a7574c23037f39f9ae042498..34a032ed5e7df889faf62124f7a2baa74d08a25f 100644 GIT binary patch delta 22172 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 QcETwA*fCeV{!8)y0BC6_4FCWD delta 22042 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 k!61- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + const body: Word.Body = context.document.body; + body.clear(); + + // Inserts a text box. + const textBoxOptions: Word.InsertShapeOptions = { + top: 0, + left: 0, + height: 100, + width: 100, + }; + body.paragraphs.getLast().insertTextBox("placeholder text", textBoxOptions); + + // Inserts a geometric shape. + const geometricShapeOptions: Word.InsertShapeOptions = { + height: 120, + width: 120, + left: 120, + }; + body.paragraphs.getLast().insertGeometricShape(Word.GeometricShapeType.star24, geometricShapeOptions); await context.sync(); }); Word.Paragraph#insertText:member(1): @@ -27965,6 +27993,37 @@ Word.Shape#delete:member(1): console.log("The first text box in document was deleted."); }); +Word.Shape#select:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Groups the shapes (including text boxes) found in the document body. + const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ + Word.ShapeType.geometricShape, + Word.ShapeType.textBox, + ]); + shapes.load("items"); + await context.sync(); + + const numShapes = shapes.items.length; + if (numShapes === 0) { + console.log("No shapes found in document body."); + return; + } + + console.log(`Number of shapes to group: ${numShapes}`); + + const groupedShape: Word.Shape = shapes.group(); + groupedShape.load("shapeGroup/shapes"); + await context.sync(); + + const shapeGroup: Word.ShapeGroup = groupedShape.shapeGroup; + console.log("Shapes grouped:", shapeGroup.shapes); + groupedShape.select(); + }); Word.Shape#body:member: - >- // Link to full sample: @@ -28224,6 +28283,37 @@ Word.ShapeCollection#getFirstOrNullObject:member(1): : `Text in first text box: ${shape.body.text}` ); }); +Word.ShapeCollection#group:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Groups the shapes (including text boxes) found in the document body. + const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ + Word.ShapeType.geometricShape, + Word.ShapeType.textBox, + ]); + shapes.load("items"); + await context.sync(); + + const numShapes = shapes.items.length; + if (numShapes === 0) { + console.log("No shapes found in document body."); + return; + } + + console.log(`Number of shapes to group: ${numShapes}`); + + const groupedShape: Word.Shape = shapes.group(); + groupedShape.load("shapeGroup/shapes"); + await context.sync(); + + const shapeGroup: Word.ShapeGroup = groupedShape.shapeGroup; + console.log("Shapes grouped:", shapeGroup.shapes); + groupedShape.select(); + }); Word.ShapeFill:class: - >- // Link to full sample: @@ -28336,6 +28426,60 @@ Word.ShapeFillType:enum: console.log(`\tTransparency: ${moonFill.transparency}`); console.log(`\tFill type: ${moonFillType}`); }); +Word.ShapeGroup:class: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Groups the shapes (including text boxes) found in the document body. + const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ + Word.ShapeType.geometricShape, + Word.ShapeType.textBox, + ]); + shapes.load("items"); + await context.sync(); + + const numShapes = shapes.items.length; + if (numShapes === 0) { + console.log("No shapes found in document body."); + return; + } + + console.log(`Number of shapes to group: ${numShapes}`); + + const groupedShape: Word.Shape = shapes.group(); + groupedShape.load("shapeGroup/shapes"); + await context.sync(); + + const shapeGroup: Word.ShapeGroup = groupedShape.shapeGroup; + console.log("Shapes grouped:", shapeGroup.shapes); + groupedShape.select(); + }); +Word.ShapeGroup#ungroup:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Ungroups the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.group]).getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to ungroup first shape group found in document body:", shapeGroup.shapes); + shapeGroup.ungroup(); + + console.log("Ungrouped first shape group."); + }); Word.ShapeTextOrientation:enum: - >- // Link to full sample: diff --git a/view-prod/word.json b/view-prod/word.json index f59473227..dd9bcf337 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -40,6 +40,7 @@ "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/40-tables/manage-custom-style.yaml", "word-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml", "word-shapes-manage-geometric-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml", + "word-shapes-group-ungroup": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.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", diff --git a/view/word.json b/view/word.json index 4bbdae6fd..6a953065a 100644 --- a/view/word.json +++ b/view/word.json @@ -40,6 +40,7 @@ "word-tables-manage-custom-style": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/40-tables/manage-custom-style.yaml", "word-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-shapes-text-boxes.yaml", "word-shapes-manage-geometric-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-geometric-shapes.yaml", + "word-shapes-group-ungroup": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/group-ungroup.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", From 395bfa402b866959668c7abea104875d22a9e2ea Mon Sep 17 00:00:00 2001 From: Alex Jerabek <38896772+AlexJerabek@users.noreply.github.com> Date: Thu, 6 Nov 2025 13:47:58 -0800 Subject: [PATCH 333/336] [all hosts] Reference DefinitelyTyped instead on the office CDN for types (#1024) * Reference DefinitelyTyped instead on the office CDN for types * Correct URL to point to DT --- config/build.ts | 14 ++++++-------- 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 +- .../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 +- samples/excel/10-chart/chart-leader-lines.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 +- .../12-comments-and-notes/comment-basics.yaml | 2 +- .../12-comments-and-notes/comment-mentions.yaml | 2 +- .../12-comments-and-notes/comment-replies.yaml | 2 +- .../12-comments-and-notes/comment-resolution.yaml | 2 +- .../12-comments-and-notes/excel-note-basics.yaml | 2 +- .../conditional-formatting-advanced.yaml | 2 +- .../conditional-formatting-basic.yaml | 2 +- .../excel/16-custom-functions/basic-function.yaml | 2 +- samples/excel/16-custom-functions/custom-enum.yaml | 2 +- .../custom-functions-errors.yaml | 2 +- .../data-types-custom-functions.yaml | 2 +- .../16-custom-functions/streaming-function.yaml | 2 +- .../16-custom-functions/volatile-function.yaml | 2 +- .../16-custom-functions/web-call-function.yaml | 2 +- ...create-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 +- .../20-data-types/data-types-entity-icons.yaml | 2 +- .../20-data-types/data-types-entity-values.yaml | 2 +- .../20-data-types/data-types-error-values.yaml | 2 +- .../20-data-types/data-types-formatted-number.yaml | 2 +- .../excel/20-data-types/data-types-references.yaml | 2 +- .../excel/20-data-types/data-types-web-image.yaml | 2 +- .../excel/22-data-validation/data-validation.yaml | 2 +- samples/excel/26-document/custom-properties.yaml | 2 +- .../26-document/get-file-in-slices-async.yaml | 2 +- samples/excel/26-document/properties.yaml | 2 +- .../excel/30-events/data-change-event-details.yaml | 2 +- samples/excel/30-events/data-changed.yaml | 2 +- .../excel/30-events/event-column-and-row-sort.yaml | 2 +- .../30-events/event-worksheet-single-click.yaml | 2 +- .../excel/30-events/events-chart-activated.yaml | 2 +- .../events-chartcollection-added-activated.yaml | 2 +- .../30-events/events-comment-event-handler.yaml | 2 +- samples/excel/30-events/events-disable-events.yaml | 2 +- .../excel/30-events/events-formula-changed.yaml | 2 +- samples/excel/30-events/events-table-changed.yaml | 2 +- .../30-events/events-tablecollection-changed.yaml | 2 +- .../excel/30-events/events-workbook-activated.yaml | 2 +- .../events-workbook-and-worksheet-collection.yaml | 2 +- .../30-events/events-worksheet-protection.yaml | 2 +- samples/excel/30-events/events-worksheet.yaml | 2 +- .../excel/30-events/selection-changed-events.yaml | 2 +- .../create-and-remove-named-item.yaml | 2 +- samples/excel/34-named-item/update-named-item.yaml | 2 +- .../38-pivottable/pivottable-calculations.yaml | 2 +- .../pivottable-create-and-modify.yaml | 2 +- .../pivottable-filters-and-summaries.yaml | 2 +- .../38-pivottable/pivottable-get-pivottables.yaml | 2 +- .../38-pivottable/pivottable-pivotfilters.yaml | 2 +- .../38-pivottable/pivottable-pivotlayout.yaml | 2 +- .../excel/38-pivottable/pivottable-refresh.yaml | 2 +- samples/excel/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 +- samples/excel/42-range/formatting.yaml | 2 +- .../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-cell-control.yaml | 2 +- samples/excel/42-range/range-copyfrom.yaml | 2 +- samples/excel/42-range/range-dependents.yaml | 2 +- .../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 +- .../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 +- .../excel/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 +- 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 +- .../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 +- .../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 +- samples/excel/50-workbook/create-workbook.yaml | 2 +- .../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 +- .../50-workbook/workbook-built-in-functions.yaml | 2 +- .../excel/50-workbook/workbook-calculation.yaml | 2 +- .../50-workbook/workbook-get-active-cell.yaml | 2 +- .../workbook-insert-external-worksheets.yaml | 2 +- .../excel/50-workbook/workbook-save-and-close.yaml | 2 +- samples/excel/54-worksheet/active-worksheet.yaml | 2 +- .../add-delete-rename-move-worksheet.yaml | 2 +- samples/excel/54-worksheet/gridlines.yaml | 2 +- samples/excel/54-worksheet/list-worksheets.yaml | 2 +- .../reference-worksheets-by-relative-position.yaml | 2 +- samples/excel/54-worksheet/tab-color.yaml | 2 +- .../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 +- .../excel/54-worksheet/worksheet-freeze-panes.yaml | 2 +- .../excel/54-worksheet/worksheet-page-layout.yaml | 2 +- .../excel/54-worksheet/worksheet-range-cell.yaml | 2 +- .../excel/54-worksheet/worksheet-visibility.yaml | 2 +- samples/excel/90-scenarios/currency-converter.yaml | 2 +- .../excel/90-scenarios/multiple-property-set.yaml | 2 +- .../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 +- .../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 +- .../10-roaming-settings/roaming-settings.yaml | 2 +- .../load-set-get-save.yaml | 2 +- .../20-item-body/add-inline-base64-image.yaml | 2 +- .../outlook/20-item-body/append-text-on-send.yaml | 2 +- samples/outlook/20-item-body/get-body-format.yaml | 2 +- .../outlook/20-item-body/get-selected-data.yaml | 2 +- .../outlook/20-item-body/prepend-text-on-send.yaml | 2 +- .../20-item-body/prepend-text-to-item-body.yaml | 2 +- .../20-item-body/replace-selected-text.yaml | 2 +- .../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 +- .../get-all-attendees.yaml | 2 +- .../get-cc-message-read.yaml | 2 +- .../get-from-message-compose.yaml | 2 +- .../get-from-message-read.yaml | 2 +- ...et-optional-attendees-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-attendee.yaml | 2 +- .../get-organizer-appointment-organizer.yaml | 2 +- ...et-required-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 +- ...t-optional-attendees-appointment-organizer.yaml | 2 +- ...t-required-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 +- .../40-attachments/get-attachment-content.yaml | 2 +- .../40-attachments/get-attachments-read.yaml | 2 +- .../45-categories/work-with-categories.yaml | 2 +- .../45-categories/work-with-master-categories.yaml | 2 +- .../outlook/50-recurrence/get-recurrence-read.yaml | 2 +- samples/outlook/50-recurrence/get-series-id.yaml | 2 +- .../get-set-recurrence-appointment-organizer.yaml | 2 +- .../display-existing-appointment.yaml | 2 +- .../55-display-items/display-existing-message.yaml | 2 +- .../55-display-items/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 +- .../60-sensitivity-label/sensitivity-label.yaml | 2 +- .../sensitivity-labels-catalog.yaml | 2 +- .../get-shared-properties.yaml | 2 +- .../get-internet-headers-message-read.yaml | 2 +- ...ge-custom-internet-headers-message-compose.yaml | 2 +- samples/outlook/75-regex-matches/contextual.yaml | 2 +- samples/outlook/80-events/drag-drop-item.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 +- .../send-message-using-make-ews-request-async.yaml | 2 +- .../user-callback-token.yaml | 2 +- .../user-identity-token.yaml | 2 +- .../90-other-item-apis/delay-message-delivery.yaml | 2 +- ...et-add-remove-enhancedlocation-appointment.yaml | 2 +- .../get-conversation-id-message.yaml | 2 +- .../90-other-item-apis/get-conversation-index.yaml | 2 +- .../get-date-time-created-read.yaml | 2 +- .../get-date-time-modified-read.yaml | 2 +- .../get-diagnostic-information.yaml | 2 +- .../outlook/90-other-item-apis/get-eml-format.yaml | 2 +- .../outlook/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 +- .../90-other-item-apis/get-item-class-async.yaml | 2 +- .../90-other-item-apis/get-item-class-read.yaml | 2 +- .../outlook/90-other-item-apis/get-item-type.yaml | 2 +- .../get-loaded-message-properties.yaml | 2 +- .../90-other-item-apis/get-location-read.yaml | 2 +- .../90-other-item-apis/get-message-properties.yaml | 2 +- .../get-normalized-subject-read.yaml | 2 +- .../get-set-end-appointment-organizer.yaml | 2 +- .../get-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 +- .../outlook/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 +- samples/outlook/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 +- .../99-preview-apis/get-set-isalldayevent.yaml | 2 +- .../set-displayed-body-subject.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 +- .../powerpoint/basics/basic-common-api-call.yaml | 2 +- samples/powerpoint/default.yaml | 2 +- .../powerpoint/document/create-presentation.yaml | 2 +- .../powerpoint/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 +- samples/powerpoint/shapes/add-modify-tables.yaml | 2 +- samples/powerpoint/shapes/binding-to-shapes.yaml | 2 +- samples/powerpoint/shapes/get-set-shapes.yaml | 2 +- samples/powerpoint/shapes/get-shapes-by-type.yaml | 2 +- .../powerpoint/shapes/group-ungroup-shapes.yaml | 2 +- samples/powerpoint/shapes/shapes.yaml | 2 +- .../powerpoint/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 +- .../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 +- .../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 +- .../content-control-onselectionchanged-event.yaml | 2 +- .../get-change-tracking-states.yaml | 2 +- ...insert-and-change-checkbox-content-control.yaml | 2 +- ...nsert-and-change-combo-box-content-control.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- ...t-and-change-dropdown-list-content-control.yaml | 2 +- .../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 +- .../get-paragraph-on-insertion-point.yaml | 2 +- samples/word/25-paragraph/get-text.yaml | 2 +- samples/word/25-paragraph/get-word-count.yaml | 2 +- .../word/25-paragraph/insert-formatted-text.yaml | 2 +- .../25-paragraph/insert-header-and-footer.yaml | 2 +- .../insert-in-different-locations.yaml | 2 +- .../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 +- .../word/25-paragraph/paragraph-properties.yaml | 2 +- samples/word/25-paragraph/search.yaml | 2 +- .../30-properties/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 | 2 +- samples/word/35-ranges/scroll-to-range.yaml | 2 +- .../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/45-shapes/group-ungroup.yaml | 2 +- .../word/45-shapes/manage-geometric-shapes.yaml | 2 +- .../word/45-shapes/manage-shapes-text-boxes.yaml | 2 +- samples/word/50-document/compare-documents.yaml | 2 +- samples/word/50-document/get-external-styles.yaml | 2 +- .../word/50-document/insert-external-document.yaml | 2 +- .../word/50-document/insert-section-breaks.yaml | 2 +- samples/word/50-document/manage-annotations.yaml | 2 +- samples/word/50-document/manage-body.yaml | 2 +- .../word/50-document/manage-change-tracking.yaml | 2 +- samples/word/50-document/manage-comments.yaml | 2 +- .../50-document/manage-custom-xml-part-ns.yaml | 2 +- .../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 +- .../word/50-document/manage-tracked-changes.yaml | 2 +- samples/word/50-document/save-close.yaml | 2 +- .../90-scenarios/correlated-objects-pattern.yaml | 2 +- samples/word/90-scenarios/doc-assembly.yaml | 2 +- .../word/90-scenarios/multiple-property-set.yaml | 2 +- .../99-preview-apis/close-document-window.yaml | 2 +- .../insert-and-change-content-controls.yaml | 2 +- samples/word/99-preview-apis/manage-comments.yaml | 2 +- samples/word/default.yaml | 2 +- 330 files changed, 335 insertions(+), 337 deletions(-) diff --git a/config/build.ts b/config/build.ts index fcd9e231c..042846a8e 100644 --- a/config/build.ts +++ b/config/build.ts @@ -236,8 +236,8 @@ async function processSnippets(processedSnippets: Dictionary= 0; 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'; + const officeDTS = 'https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts'; + const betaOfficeDTS = 'https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js-preview/index.d.ts'; const officeJsReferences = snippet.libraries.split('\n') @@ -247,14 +247,12 @@ async function processSnippets(processedSnippets: Dictionary reference.trim()) - .filter(reference => reference.match(/.*((@types\/office-js(-preview)?)|(office\.d\.ts))$/gi)); + .filter(reference => reference.match(/.*((@types\/office-js(-preview)?)|((index|office)\.d\.ts))$/gi)); /* Note: regex matches: - - @types/office-js - - @types/office-js-preview - - https://unpkg.com/etc/office.d.ts + - https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts + - https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js-preview/index.d.ts But not: - - @types/office-jsfake - - https://unpkg.com/etc/office.d.ts.ish + - https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.tsfake - office.d.ts.unrelated */ diff --git a/private-samples/excel/20-chart/chart-title-ts.yaml b/private-samples/excel/20-chart/chart-title-ts.yaml index 40d3be036..4c046d4e0 100644 --- a/private-samples/excel/20-chart/chart-title-ts.yaml +++ b/private-samples/excel/20-chart/chart-title-ts.yaml @@ -141,6 +141,6 @@ libraries: | jquery@3.1.1 // IntelliSense: @types/library or node_modules paths or URL to d.ts files - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts @types/core-js @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 b25de1525..6c5480712 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/01-basics/basic-api-call.yaml b/samples/excel/01-basics/basic-api-call.yaml index 144e6d260..3c2d0ae06 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/01-basics/basic-common-api-call.yaml b/samples/excel/01-basics/basic-common-api-call.yaml index 86b1df00e..cbb1a8992 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-axis-formatting.yaml b/samples/excel/10-chart/chart-axis-formatting.yaml index b6f3b5d56..d6cec75ad 100644 --- a/samples/excel/10-chart/chart-axis-formatting.yaml +++ b/samples/excel/10-chart/chart-axis-formatting.yaml @@ -154,7 +154,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-axis.yaml b/samples/excel/10-chart/chart-axis.yaml index 103105274..788450358 100644 --- a/samples/excel/10-chart/chart-axis.yaml +++ b/samples/excel/10-chart/chart-axis.yaml @@ -221,7 +221,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-bubble-chart.yaml b/samples/excel/10-chart/chart-bubble-chart.yaml index 84a38133e..9a80e9d81 100644 --- a/samples/excel/10-chart/chart-bubble-chart.yaml +++ b/samples/excel/10-chart/chart-bubble-chart.yaml @@ -154,7 +154,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-create-several-charts.yaml b/samples/excel/10-chart/chart-create-several-charts.yaml index 078f6b308..f76ef24c9 100644 --- a/samples/excel/10-chart/chart-create-several-charts.yaml +++ b/samples/excel/10-chart/chart-create-several-charts.yaml @@ -313,7 +313,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-data-labels.yaml b/samples/excel/10-chart/chart-data-labels.yaml index e70e8eac5..5e3113b8c 100644 --- a/samples/excel/10-chart/chart-data-labels.yaml +++ b/samples/excel/10-chart/chart-data-labels.yaml @@ -272,7 +272,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-data-source.yaml b/samples/excel/10-chart/chart-data-source.yaml index 417b3e253..59e74e3f5 100644 --- a/samples/excel/10-chart/chart-data-source.yaml +++ b/samples/excel/10-chart/chart-data-source.yaml @@ -113,7 +113,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-data-table.yaml b/samples/excel/10-chart/chart-data-table.yaml index 8e47b80eb..423e060b2 100644 --- a/samples/excel/10-chart/chart-data-table.yaml +++ b/samples/excel/10-chart/chart-data-table.yaml @@ -152,6 +152,6 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-formatting.yaml b/samples/excel/10-chart/chart-formatting.yaml index 6a6f00563..79a031e34 100644 --- a/samples/excel/10-chart/chart-formatting.yaml +++ b/samples/excel/10-chart/chart-formatting.yaml @@ -211,7 +211,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-leader-lines.yaml b/samples/excel/10-chart/chart-leader-lines.yaml index dd096f4b5..c49f07acb 100644 --- a/samples/excel/10-chart/chart-leader-lines.yaml +++ b/samples/excel/10-chart/chart-leader-lines.yaml @@ -179,7 +179,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-legend.yaml b/samples/excel/10-chart/chart-legend.yaml index b62f39f8a..5e2cabac5 100644 --- a/samples/excel/10-chart/chart-legend.yaml +++ b/samples/excel/10-chart/chart-legend.yaml @@ -131,7 +131,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-point.yaml b/samples/excel/10-chart/chart-point.yaml index 5eaef4fd7..627984a03 100644 --- a/samples/excel/10-chart/chart-point.yaml +++ b/samples/excel/10-chart/chart-point.yaml @@ -113,7 +113,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-series-markers.yaml b/samples/excel/10-chart/chart-series-markers.yaml index 5ad48cfad..6d319a862 100644 --- a/samples/excel/10-chart/chart-series-markers.yaml +++ b/samples/excel/10-chart/chart-series-markers.yaml @@ -112,7 +112,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-series-plotorder.yaml b/samples/excel/10-chart/chart-series-plotorder.yaml index 5aac92606..69ce579ef 100644 --- a/samples/excel/10-chart/chart-series-plotorder.yaml +++ b/samples/excel/10-chart/chart-series-plotorder.yaml @@ -123,7 +123,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-series.yaml b/samples/excel/10-chart/chart-series.yaml index 2010d02e3..afec9522f 100644 --- a/samples/excel/10-chart/chart-series.yaml +++ b/samples/excel/10-chart/chart-series.yaml @@ -139,7 +139,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-title-format.yaml b/samples/excel/10-chart/chart-title-format.yaml index 31090e70c..b080b8b5f 100644 --- a/samples/excel/10-chart/chart-title-format.yaml +++ b/samples/excel/10-chart/chart-title-format.yaml @@ -147,7 +147,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/10-chart/chart-trendlines.yaml b/samples/excel/10-chart/chart-trendlines.yaml index c8755bb33..ee4b19ffe 100644 --- a/samples/excel/10-chart/chart-trendlines.yaml +++ b/samples/excel/10-chart/chart-trendlines.yaml @@ -183,7 +183,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/create-doughnut-chart.yaml b/samples/excel/10-chart/create-doughnut-chart.yaml index 2728bf4fe..a9df8e856 100644 --- a/samples/excel/10-chart/create-doughnut-chart.yaml +++ b/samples/excel/10-chart/create-doughnut-chart.yaml @@ -138,7 +138,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/12-comments-and-notes/comment-basics.yaml b/samples/excel/12-comments-and-notes/comment-basics.yaml index ea27365f6..2739d6a08 100644 --- a/samples/excel/12-comments-and-notes/comment-basics.yaml +++ b/samples/excel/12-comments-and-notes/comment-basics.yaml @@ -131,7 +131,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/12-comments-and-notes/comment-mentions.yaml b/samples/excel/12-comments-and-notes/comment-mentions.yaml index 7b6a09088..7c4755829 100644 --- a/samples/excel/12-comments-and-notes/comment-mentions.yaml +++ b/samples/excel/12-comments-and-notes/comment-mentions.yaml @@ -90,7 +90,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/12-comments-and-notes/comment-replies.yaml b/samples/excel/12-comments-and-notes/comment-replies.yaml index e3f10b0b7..ae02603bd 100644 --- a/samples/excel/12-comments-and-notes/comment-replies.yaml +++ b/samples/excel/12-comments-and-notes/comment-replies.yaml @@ -152,7 +152,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/12-comments-and-notes/comment-resolution.yaml b/samples/excel/12-comments-and-notes/comment-resolution.yaml index 2b7039fc3..bfb60392a 100644 --- a/samples/excel/12-comments-and-notes/comment-resolution.yaml +++ b/samples/excel/12-comments-and-notes/comment-resolution.yaml @@ -101,7 +101,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 fc74c8521..582c5d52c 100644 --- a/samples/excel/12-comments-and-notes/excel-note-basics.yaml +++ b/samples/excel/12-comments-and-notes/excel-note-basics.yaml @@ -156,7 +156,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/14-conditional-formatting/conditional-formatting-advanced.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml index bae922ff7..7e207e842 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-advanced.yaml @@ -224,7 +224,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml index 5ea7fceef..5c6d0b0e3 100644 --- a/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml +++ b/samples/excel/14-conditional-formatting/conditional-formatting-basic.yaml @@ -343,7 +343,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/16-custom-functions/basic-function.yaml b/samples/excel/16-custom-functions/basic-function.yaml index 377ee85cb..918cd2354 100644 --- a/samples/excel/16-custom-functions/basic-function.yaml +++ b/samples/excel/16-custom-functions/basic-function.yaml @@ -19,5 +19,5 @@ script: language: typescript libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts core-js@2.4.1/client/core.min.js diff --git a/samples/excel/16-custom-functions/custom-enum.yaml b/samples/excel/16-custom-functions/custom-enum.yaml index f2e3cbb4e..5eb140f97 100644 --- a/samples/excel/16-custom-functions/custom-enum.yaml +++ b/samples/excel/16-custom-functions/custom-enum.yaml @@ -78,7 +78,7 @@ script: language: typescript libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/16-custom-functions/custom-functions-errors.yaml b/samples/excel/16-custom-functions/custom-functions-errors.yaml index 98c38b020..bfca8594a 100644 --- a/samples/excel/16-custom-functions/custom-functions-errors.yaml +++ b/samples/excel/16-custom-functions/custom-functions-errors.yaml @@ -34,5 +34,5 @@ script: language: typescript libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts 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 34796ff56..3a32c08ee 100644 --- a/samples/excel/16-custom-functions/data-types-custom-functions.yaml +++ b/samples/excel/16-custom-functions/data-types-custom-functions.yaml @@ -328,7 +328,7 @@ script: language: typescript libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts core-js@2.4.1/client/core.min.js @types/core-js diff --git a/samples/excel/16-custom-functions/streaming-function.yaml b/samples/excel/16-custom-functions/streaming-function.yaml index 1e9740051..8959a13e4 100644 --- a/samples/excel/16-custom-functions/streaming-function.yaml +++ b/samples/excel/16-custom-functions/streaming-function.yaml @@ -29,5 +29,5 @@ script: language: typescript libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts 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 68438aefc..810a61631 100644 --- a/samples/excel/16-custom-functions/volatile-function.yaml +++ b/samples/excel/16-custom-functions/volatile-function.yaml @@ -18,5 +18,5 @@ script: language: typescript libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts 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 6d25d23c8..930651c9a 100644 --- a/samples/excel/16-custom-functions/web-call-function.yaml +++ b/samples/excel/16-custom-functions/web-call-function.yaml @@ -29,5 +29,5 @@ script: language: typescript libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts 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 94f01a2ff..a3bd21c84 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 @@ -144,7 +144,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/18-custom-xml-parts/test-xml-for-unique-namespace.yaml b/samples/excel/18-custom-xml-parts/test-xml-for-unique-namespace.yaml index 9df023ebf..0ffaf7ac0 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 @@ -130,7 +130,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 b72203a60..523da4b44 100644 --- a/samples/excel/20-data-types/data-types-basic-types.yaml +++ b/samples/excel/20-data-types/data-types-basic-types.yaml @@ -356,7 +356,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 984bb7ab7..497c603ec 100644 --- a/samples/excel/20-data-types/data-types-entity-attribution.yaml +++ b/samples/excel/20-data-types/data-types-entity-attribution.yaml @@ -222,7 +222,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 704894f33..b9bac49e6 100644 --- a/samples/excel/20-data-types/data-types-entity-icons.yaml +++ b/samples/excel/20-data-types/data-types-entity-icons.yaml @@ -108,7 +108,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 793b288d0..577b39f18 100644 --- a/samples/excel/20-data-types/data-types-entity-values.yaml +++ b/samples/excel/20-data-types/data-types-entity-values.yaml @@ -595,7 +595,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/20-data-types/data-types-error-values.yaml b/samples/excel/20-data-types/data-types-error-values.yaml index c5dfce56c..26fe44110 100644 --- a/samples/excel/20-data-types/data-types-error-values.yaml +++ b/samples/excel/20-data-types/data-types-error-values.yaml @@ -107,7 +107,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/20-data-types/data-types-formatted-number.yaml b/samples/excel/20-data-types/data-types-formatted-number.yaml index 9c5e243aa..e072889de 100644 --- a/samples/excel/20-data-types/data-types-formatted-number.yaml +++ b/samples/excel/20-data-types/data-types-formatted-number.yaml @@ -145,7 +145,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/20-data-types/data-types-references.yaml b/samples/excel/20-data-types/data-types-references.yaml index 266750743..e139b4da9 100644 --- a/samples/excel/20-data-types/data-types-references.yaml +++ b/samples/excel/20-data-types/data-types-references.yaml @@ -333,7 +333,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/20-data-types/data-types-web-image.yaml b/samples/excel/20-data-types/data-types-web-image.yaml index fb64e6d37..d42de34d6 100644 --- a/samples/excel/20-data-types/data-types-web-image.yaml +++ b/samples/excel/20-data-types/data-types-web-image.yaml @@ -183,7 +183,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/22-data-validation/data-validation.yaml b/samples/excel/22-data-validation/data-validation.yaml index 4d344d30b..d808941a2 100644 --- a/samples/excel/22-data-validation/data-validation.yaml +++ b/samples/excel/22-data-validation/data-validation.yaml @@ -178,7 +178,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/26-document/custom-properties.yaml b/samples/excel/26-document/custom-properties.yaml index 0901f91c1..4ca88f810 100644 --- a/samples/excel/26-document/custom-properties.yaml +++ b/samples/excel/26-document/custom-properties.yaml @@ -130,7 +130,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 defcd7050..9c1cff8ca 100644 --- a/samples/excel/26-document/get-file-in-slices-async.yaml +++ b/samples/excel/26-document/get-file-in-slices-async.yaml @@ -205,7 +205,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/26-document/properties.yaml b/samples/excel/26-document/properties.yaml index da1c1a4f3..e6de99c1a 100644 --- a/samples/excel/26-document/properties.yaml +++ b/samples/excel/26-document/properties.yaml @@ -169,7 +169,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/data-change-event-details.yaml b/samples/excel/30-events/data-change-event-details.yaml index 931b58c9b..83fb96270 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/data-changed.yaml b/samples/excel/30-events/data-changed.yaml index 468506f12..4418efaff 100644 --- a/samples/excel/30-events/data-changed.yaml +++ b/samples/excel/30-events/data-changed.yaml @@ -106,7 +106,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 046886aff..8fe197053 100644 --- a/samples/excel/30-events/event-column-and-row-sort.yaml +++ b/samples/excel/30-events/event-column-and-row-sort.yaml @@ -194,7 +194,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/event-worksheet-single-click.yaml b/samples/excel/30-events/event-worksheet-single-click.yaml index 19f110f30..613db7ddb 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/events-chart-activated.yaml b/samples/excel/30-events/events-chart-activated.yaml index a9378e940..a3e824e2b 100644 --- a/samples/excel/30-events/events-chart-activated.yaml +++ b/samples/excel/30-events/events-chart-activated.yaml @@ -168,7 +168,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/events-chartcollection-added-activated.yaml b/samples/excel/30-events/events-chartcollection-added-activated.yaml index 1c0c78280..09ea40ada 100644 --- a/samples/excel/30-events/events-chartcollection-added-activated.yaml +++ b/samples/excel/30-events/events-chartcollection-added-activated.yaml @@ -149,7 +149,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/30-events/events-comment-event-handler.yaml b/samples/excel/30-events/events-comment-event-handler.yaml index 89be09ffb..451e5852c 100644 --- a/samples/excel/30-events/events-comment-event-handler.yaml +++ b/samples/excel/30-events/events-comment-event-handler.yaml @@ -169,7 +169,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/30-events/events-disable-events.yaml b/samples/excel/30-events/events-disable-events.yaml index 681294088..80390cd6a 100644 --- a/samples/excel/30-events/events-disable-events.yaml +++ b/samples/excel/30-events/events-disable-events.yaml @@ -175,7 +175,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/events-formula-changed.yaml b/samples/excel/30-events/events-formula-changed.yaml index e7c81a18d..fddc2c4a5 100644 --- a/samples/excel/30-events/events-formula-changed.yaml +++ b/samples/excel/30-events/events-formula-changed.yaml @@ -119,7 +119,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/events-table-changed.yaml b/samples/excel/30-events/events-table-changed.yaml index e7896c2a1..e5dfb7b9f 100644 --- a/samples/excel/30-events/events-table-changed.yaml +++ b/samples/excel/30-events/events-table-changed.yaml @@ -155,7 +155,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/events-tablecollection-changed.yaml b/samples/excel/30-events/events-tablecollection-changed.yaml index 786274970..4e1d575b3 100644 --- a/samples/excel/30-events/events-tablecollection-changed.yaml +++ b/samples/excel/30-events/events-tablecollection-changed.yaml @@ -151,7 +151,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/events-workbook-activated.yaml b/samples/excel/30-events/events-workbook-activated.yaml index 8f1f6ea6a..40f11633c 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 bf85695b0..166a02278 100644 --- a/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml +++ b/samples/excel/30-events/events-workbook-and-worksheet-collection.yaml @@ -222,7 +222,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/30-events/events-worksheet-protection.yaml b/samples/excel/30-events/events-worksheet-protection.yaml index 636bc2b52..8b83fc7cc 100644 --- a/samples/excel/30-events/events-worksheet-protection.yaml +++ b/samples/excel/30-events/events-worksheet-protection.yaml @@ -99,7 +99,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/30-events/events-worksheet.yaml b/samples/excel/30-events/events-worksheet.yaml index ed4c09408..77b2aee9b 100644 --- a/samples/excel/30-events/events-worksheet.yaml +++ b/samples/excel/30-events/events-worksheet.yaml @@ -219,7 +219,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/30-events/selection-changed-events.yaml b/samples/excel/30-events/selection-changed-events.yaml index ab7203010..cce99d599 100644 --- a/samples/excel/30-events/selection-changed-events.yaml +++ b/samples/excel/30-events/selection-changed-events.yaml @@ -143,7 +143,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 eadc487fa..05d26ce65 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/34-named-item/update-named-item.yaml b/samples/excel/34-named-item/update-named-item.yaml index 331a88f32..a82b5408c 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-calculations.yaml b/samples/excel/38-pivottable/pivottable-calculations.yaml index d66f74eb9..602a9788e 100644 --- a/samples/excel/38-pivottable/pivottable-calculations.yaml +++ b/samples/excel/38-pivottable/pivottable-calculations.yaml @@ -198,7 +198,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml index ba7020057..a69c70a56 100644 --- a/samples/excel/38-pivottable/pivottable-create-and-modify.yaml +++ b/samples/excel/38-pivottable/pivottable-create-and-modify.yaml @@ -262,7 +262,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml index 5948578ce..7dd446c5d 100644 --- a/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml +++ b/samples/excel/38-pivottable/pivottable-filters-and-summaries.yaml @@ -217,7 +217,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml index 5748fce28..2f65a1dbb 100644 --- a/samples/excel/38-pivottable/pivottable-get-pivottables.yaml +++ b/samples/excel/38-pivottable/pivottable-get-pivottables.yaml @@ -184,7 +184,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml index bb857275b..1d2bcef68 100644 --- a/samples/excel/38-pivottable/pivottable-pivotfilters.yaml +++ b/samples/excel/38-pivottable/pivottable-pivotfilters.yaml @@ -312,7 +312,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-pivotlayout.yaml b/samples/excel/38-pivottable/pivottable-pivotlayout.yaml index 703c6bcc4..28b07c491 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-refresh.yaml b/samples/excel/38-pivottable/pivottable-refresh.yaml index 13f6fb0b5..e2975ff72 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-slicer.yaml b/samples/excel/38-pivottable/pivottable-slicer.yaml index 1b057f748..15c781177 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/38-pivottable/pivottable-source-data.yaml b/samples/excel/38-pivottable/pivottable-source-data.yaml index 238b79392..75014fedb 100644 --- a/samples/excel/38-pivottable/pivottable-source-data.yaml +++ b/samples/excel/38-pivottable/pivottable-source-data.yaml @@ -121,7 +121,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/cell-properties.yaml b/samples/excel/42-range/cell-properties.yaml index bdf6baafb..acf10f685 100644 --- a/samples/excel/42-range/cell-properties.yaml +++ b/samples/excel/42-range/cell-properties.yaml @@ -180,7 +180,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/dynamic-arrays.yaml b/samples/excel/42-range/dynamic-arrays.yaml index 3d98c24ec..f2ab8a567 100644 --- a/samples/excel/42-range/dynamic-arrays.yaml +++ b/samples/excel/42-range/dynamic-arrays.yaml @@ -171,7 +171,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/formatting.yaml b/samples/excel/42-range/formatting.yaml index f4f5a4a91..3e526ce4a 100644 --- a/samples/excel/42-range/formatting.yaml +++ b/samples/excel/42-range/formatting.yaml @@ -110,7 +110,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/insert-delete-clear-range.yaml b/samples/excel/42-range/insert-delete-clear-range.yaml index 2507db642..a762879be 100644 --- a/samples/excel/42-range/insert-delete-clear-range.yaml +++ b/samples/excel/42-range/insert-delete-clear-range.yaml @@ -123,7 +123,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outline.yaml b/samples/excel/42-range/outline.yaml index e4d261065..f3c53898c 100644 --- a/samples/excel/42-range/outline.yaml +++ b/samples/excel/42-range/outline.yaml @@ -226,7 +226,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/precedents.yaml b/samples/excel/42-range/precedents.yaml index 0f694b5e1..d461dea31 100644 --- a/samples/excel/42-range/precedents.yaml +++ b/samples/excel/42-range/precedents.yaml @@ -203,7 +203,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-areas.yaml b/samples/excel/42-range/range-areas.yaml index 1b3297ce9..23f24ddf6 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-auto-fill.yaml b/samples/excel/42-range/range-auto-fill.yaml index b0c331649..3130ca6f8 100644 --- a/samples/excel/42-range/range-auto-fill.yaml +++ b/samples/excel/42-range/range-auto-fill.yaml @@ -142,7 +142,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-cell-control.yaml b/samples/excel/42-range/range-cell-control.yaml index ef4ee5a4d..430300414 100644 --- a/samples/excel/42-range/range-cell-control.yaml +++ b/samples/excel/42-range/range-cell-control.yaml @@ -158,7 +158,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-copyfrom.yaml b/samples/excel/42-range/range-copyfrom.yaml index 391b6ef7a..c48034c2c 100644 --- a/samples/excel/42-range/range-copyfrom.yaml +++ b/samples/excel/42-range/range-copyfrom.yaml @@ -213,7 +213,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-dependents.yaml b/samples/excel/42-range/range-dependents.yaml index f798dd5e6..3a7e6ccd5 100644 --- a/samples/excel/42-range/range-dependents.yaml +++ b/samples/excel/42-range/range-dependents.yaml @@ -162,7 +162,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-direct-dependents.yaml b/samples/excel/42-range/range-direct-dependents.yaml index 8942430fe..a4843dd2b 100644 --- a/samples/excel/42-range/range-direct-dependents.yaml +++ b/samples/excel/42-range/range-direct-dependents.yaml @@ -155,7 +155,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-find.yaml b/samples/excel/42-range/range-find.yaml index 1fde3e616..a72156601 100644 --- a/samples/excel/42-range/range-find.yaml +++ b/samples/excel/42-range/range-find.yaml @@ -161,7 +161,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-get-range-edge.yaml b/samples/excel/42-range/range-get-range-edge.yaml index d4f020020..9d5a21ffe 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-hyperlink.yaml b/samples/excel/42-range/range-hyperlink.yaml index 035a8cb50..1b83b866e 100644 --- a/samples/excel/42-range/range-hyperlink.yaml +++ b/samples/excel/42-range/range-hyperlink.yaml @@ -313,7 +313,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-merged-ranges.yaml b/samples/excel/42-range/range-merged-ranges.yaml index 62db7860f..d6e4d7fe7 100644 --- a/samples/excel/42-range/range-merged-ranges.yaml +++ b/samples/excel/42-range/range-merged-ranges.yaml @@ -125,7 +125,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-relationships.yaml b/samples/excel/42-range/range-relationships.yaml index 24dcea2e1..9f6343134 100644 --- a/samples/excel/42-range/range-relationships.yaml +++ b/samples/excel/42-range/range-relationships.yaml @@ -248,7 +248,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-remove-duplicates.yaml b/samples/excel/42-range/range-remove-duplicates.yaml index c6fd18196..b3227be4f 100644 --- a/samples/excel/42-range/range-remove-duplicates.yaml +++ b/samples/excel/42-range/range-remove-duplicates.yaml @@ -119,7 +119,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/range-text-orientation.yaml b/samples/excel/42-range/range-text-orientation.yaml index a24409415..60ef84009 100644 --- a/samples/excel/42-range/range-text-orientation.yaml +++ b/samples/excel/42-range/range-text-orientation.yaml @@ -113,7 +113,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/selected-range.yaml b/samples/excel/42-range/selected-range.yaml index 5b3dda01b..cc469f680 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/set-get-values.yaml b/samples/excel/42-range/set-get-values.yaml index 78c79eefd..373aa4107 100644 --- a/samples/excel/42-range/set-get-values.yaml +++ b/samples/excel/42-range/set-get-values.yaml @@ -227,7 +227,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/42-range/style.yaml b/samples/excel/42-range/style.yaml index 3254d3bb1..8ae288cd7 100644 --- a/samples/excel/42-range/style.yaml +++ b/samples/excel/42-range/style.yaml @@ -213,7 +213,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/used-range.yaml b/samples/excel/42-range/used-range.yaml index 643156e10..78b4cb8cf 100644 --- a/samples/excel/42-range/used-range.yaml +++ b/samples/excel/42-range/used-range.yaml @@ -135,7 +135,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/44-shape/shape-create-and-delete.yaml b/samples/excel/44-shape/shape-create-and-delete.yaml index 13f4500fb..4a07c2b60 100644 --- a/samples/excel/44-shape/shape-create-and-delete.yaml +++ b/samples/excel/44-shape/shape-create-and-delete.yaml @@ -130,7 +130,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/44-shape/shape-get-active.yaml b/samples/excel/44-shape/shape-get-active.yaml index 8b6ff0cd6..e97abfc29 100644 --- a/samples/excel/44-shape/shape-get-active.yaml +++ b/samples/excel/44-shape/shape-get-active.yaml @@ -169,7 +169,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/44-shape/shape-groups.yaml b/samples/excel/44-shape/shape-groups.yaml index 6fd30d1ad..27d563fc6 100644 --- a/samples/excel/44-shape/shape-groups.yaml +++ b/samples/excel/44-shape/shape-groups.yaml @@ -145,7 +145,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/44-shape/shape-images.yaml b/samples/excel/44-shape/shape-images.yaml index a880febde..f0dbed161 100644 --- a/samples/excel/44-shape/shape-images.yaml +++ b/samples/excel/44-shape/shape-images.yaml @@ -129,7 +129,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/44-shape/shape-lines.yaml b/samples/excel/44-shape/shape-lines.yaml index 58577bab0..521fcaa91 100644 --- a/samples/excel/44-shape/shape-lines.yaml +++ b/samples/excel/44-shape/shape-lines.yaml @@ -219,7 +219,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/44-shape/shape-move-and-order.yaml b/samples/excel/44-shape/shape-move-and-order.yaml index bab2c6c3b..fc9b2373d 100644 --- a/samples/excel/44-shape/shape-move-and-order.yaml +++ b/samples/excel/44-shape/shape-move-and-order.yaml @@ -160,7 +160,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/44-shape/shape-textboxes.yaml b/samples/excel/44-shape/shape-textboxes.yaml index 3193d3338..62d2ab023 100644 --- a/samples/excel/44-shape/shape-textboxes.yaml +++ b/samples/excel/44-shape/shape-textboxes.yaml @@ -135,7 +135,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 c8a21f8e0..a50c23cf2 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 @@ -165,7 +165,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/convert-range-to-table.yaml b/samples/excel/46-table/convert-range-to-table.yaml index 2476e7886..41472f1c0 100644 --- a/samples/excel/46-table/convert-range-to-table.yaml +++ b/samples/excel/46-table/convert-range-to-table.yaml @@ -91,7 +91,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/create-table.yaml b/samples/excel/46-table/create-table.yaml index bca2b65b2..fefc4246e 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/filter-data.yaml b/samples/excel/46-table/filter-data.yaml index d0efc48ee..6ed0d3812 100644 --- a/samples/excel/46-table/filter-data.yaml +++ b/samples/excel/46-table/filter-data.yaml @@ -122,7 +122,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/formatting.yaml b/samples/excel/46-table/formatting.yaml index 1e40a5350..7fdd568d8 100644 --- a/samples/excel/46-table/formatting.yaml +++ b/samples/excel/46-table/formatting.yaml @@ -98,7 +98,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/get-data-from-table.yaml b/samples/excel/46-table/get-data-from-table.yaml index 591ba0d07..04533610a 100644 --- a/samples/excel/46-table/get-data-from-table.yaml +++ b/samples/excel/46-table/get-data-from-table.yaml @@ -111,7 +111,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 23eb4f02c..64d67cb9e 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 @@ -134,7 +134,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/import-json-data.yaml b/samples/excel/46-table/import-json-data.yaml index 70d69c39f..3c6f80d16 100644 --- a/samples/excel/46-table/import-json-data.yaml +++ b/samples/excel/46-table/import-json-data.yaml @@ -139,7 +139,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/resize-table.yaml b/samples/excel/46-table/resize-table.yaml index 2b15b90cd..5b41656d6 100644 --- a/samples/excel/46-table/resize-table.yaml +++ b/samples/excel/46-table/resize-table.yaml @@ -94,7 +94,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/46-table/sort-data.yaml b/samples/excel/46-table/sort-data.yaml index 43b994cf8..85780b33f 100644 --- a/samples/excel/46-table/sort-data.yaml +++ b/samples/excel/46-table/sort-data.yaml @@ -105,7 +105,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 3797bcda7..43fd23536 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/50-workbook/create-workbook.yaml b/samples/excel/50-workbook/create-workbook.yaml index bd56088c4..6516a6b05 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/50-workbook/culture-info-date-time.yaml b/samples/excel/50-workbook/culture-info-date-time.yaml index 036894f16..03a3df575 100644 --- a/samples/excel/50-workbook/culture-info-date-time.yaml +++ b/samples/excel/50-workbook/culture-info-date-time.yaml @@ -133,7 +133,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/50-workbook/culture-info.yaml b/samples/excel/50-workbook/culture-info.yaml index 1ba143d4a..602c6e658 100644 --- a/samples/excel/50-workbook/culture-info.yaml +++ b/samples/excel/50-workbook/culture-info.yaml @@ -145,7 +145,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/50-workbook/data-protection.yaml b/samples/excel/50-workbook/data-protection.yaml index a87a43384..3597277aa 100644 --- a/samples/excel/50-workbook/data-protection.yaml +++ b/samples/excel/50-workbook/data-protection.yaml @@ -251,7 +251,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/50-workbook/workbook-built-in-functions.yaml b/samples/excel/50-workbook/workbook-built-in-functions.yaml index 48e46b992..407a00492 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/50-workbook/workbook-calculation.yaml b/samples/excel/50-workbook/workbook-calculation.yaml index 02235ae2e..83e0dfb71 100644 --- a/samples/excel/50-workbook/workbook-calculation.yaml +++ b/samples/excel/50-workbook/workbook-calculation.yaml @@ -185,7 +185,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/50-workbook/workbook-get-active-cell.yaml b/samples/excel/50-workbook/workbook-get-active-cell.yaml index 10e5df770..a0d0c7f07 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml b/samples/excel/50-workbook/workbook-insert-external-worksheets.yaml index 561a7d875..00559fc11 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/50-workbook/workbook-save-and-close.yaml b/samples/excel/50-workbook/workbook-save-and-close.yaml index 817908238..bccaac16a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/active-worksheet.yaml b/samples/excel/54-worksheet/active-worksheet.yaml index 3159d203c..ad537a483 100644 --- a/samples/excel/54-worksheet/active-worksheet.yaml +++ b/samples/excel/54-worksheet/active-worksheet.yaml @@ -118,7 +118,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 1425fe93d..4f31e4fcf 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/54-worksheet/gridlines.yaml b/samples/excel/54-worksheet/gridlines.yaml index 7a25135b1..b82a15470 100644 --- a/samples/excel/54-worksheet/gridlines.yaml +++ b/samples/excel/54-worksheet/gridlines.yaml @@ -72,7 +72,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/list-worksheets.yaml b/samples/excel/54-worksheet/list-worksheets.yaml index 180475d1d..6bda99375 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 fc9fca872..b1eb24c61 100644 --- a/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml +++ b/samples/excel/54-worksheet/reference-worksheets-by-relative-position.yaml @@ -156,7 +156,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/tab-color.yaml b/samples/excel/54-worksheet/tab-color.yaml index ab336da87..eee99f9b4 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/worksheet-auto-filter.yaml b/samples/excel/54-worksheet/worksheet-auto-filter.yaml index 8434addeb..1450908f8 100644 --- a/samples/excel/54-worksheet/worksheet-auto-filter.yaml +++ b/samples/excel/54-worksheet/worksheet-auto-filter.yaml @@ -206,7 +206,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/worksheet-copy.yaml b/samples/excel/54-worksheet/worksheet-copy.yaml index 7053c450a..5a3cc6818 100644 --- a/samples/excel/54-worksheet/worksheet-copy.yaml +++ b/samples/excel/54-worksheet/worksheet-copy.yaml @@ -97,7 +97,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/worksheet-find-all.yaml b/samples/excel/54-worksheet/worksheet-find-all.yaml index 6278ab9f6..5b0af2ad4 100644 --- a/samples/excel/54-worksheet/worksheet-find-all.yaml +++ b/samples/excel/54-worksheet/worksheet-find-all.yaml @@ -141,7 +141,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml index d1c4f5dcb..de0f26ae5 100644 --- a/samples/excel/54-worksheet/worksheet-freeze-panes.yaml +++ b/samples/excel/54-worksheet/worksheet-freeze-panes.yaml @@ -171,7 +171,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/54-worksheet/worksheet-page-layout.yaml b/samples/excel/54-worksheet/worksheet-page-layout.yaml index 46beed753..f94c050d7 100644 --- a/samples/excel/54-worksheet/worksheet-page-layout.yaml +++ b/samples/excel/54-worksheet/worksheet-page-layout.yaml @@ -204,7 +204,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/54-worksheet/worksheet-range-cell.yaml b/samples/excel/54-worksheet/worksheet-range-cell.yaml index 95f7ff500..5e6e7340d 100644 --- a/samples/excel/54-worksheet/worksheet-range-cell.yaml +++ b/samples/excel/54-worksheet/worksheet-range-cell.yaml @@ -142,7 +142,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/54-worksheet/worksheet-visibility.yaml b/samples/excel/54-worksheet/worksheet-visibility.yaml index aeff5bbe7..15dd5af96 100644 --- a/samples/excel/54-worksheet/worksheet-visibility.yaml +++ b/samples/excel/54-worksheet/worksheet-visibility.yaml @@ -117,7 +117,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/90-scenarios/currency-converter.yaml b/samples/excel/90-scenarios/currency-converter.yaml index 1510dc666..70f09cc0f 100644 --- a/samples/excel/90-scenarios/currency-converter.yaml +++ b/samples/excel/90-scenarios/currency-converter.yaml @@ -180,7 +180,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/90-scenarios/multiple-property-set.yaml b/samples/excel/90-scenarios/multiple-property-set.yaml index 9a48bb487..56c6c6e30 100644 --- a/samples/excel/90-scenarios/multiple-property-set.yaml +++ b/samples/excel/90-scenarios/multiple-property-set.yaml @@ -129,7 +129,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/90-scenarios/performance-optimization.yaml b/samples/excel/90-scenarios/performance-optimization.yaml index f7af6e94a..feb4400b0 100644 --- a/samples/excel/90-scenarios/performance-optimization.yaml +++ b/samples/excel/90-scenarios/performance-optimization.yaml @@ -184,7 +184,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/90-scenarios/report-generation.yaml b/samples/excel/90-scenarios/report-generation.yaml index 88a83e495..749d8b54e 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/90-scenarios/working-with-dates.yaml b/samples/excel/90-scenarios/working-with-dates.yaml index 531ca8299..d2a901c9f 100644 --- a/samples/excel/90-scenarios/working-with-dates.yaml +++ b/samples/excel/90-scenarios/working-with-dates.yaml @@ -129,7 +129,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/99-just-for-fun/color-wheel.yaml b/samples/excel/99-just-for-fun/color-wheel.yaml index f4a2d1692..2e6b62749 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/99-just-for-fun/gradient.yaml b/samples/excel/99-just-for-fun/gradient.yaml index cf94c9c6d..619402144 100644 --- a/samples/excel/99-just-for-fun/gradient.yaml +++ b/samples/excel/99-just-for-fun/gradient.yaml @@ -228,7 +228,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 3388e0af9..812b2fdfd 100644 --- a/samples/excel/99-just-for-fun/path-finder-game.yaml +++ b/samples/excel/99-just-for-fun/path-finder-game.yaml @@ -221,7 +221,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/99-just-for-fun/patterns.yaml b/samples/excel/99-just-for-fun/patterns.yaml index 723400183..76399f6c7 100644 --- a/samples/excel/99-just-for-fun/patterns.yaml +++ b/samples/excel/99-just-for-fun/patterns.yaml @@ -186,7 +186,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/99-just-for-fun/tetrominos.yaml b/samples/excel/99-just-for-fun/tetrominos.yaml index 2ca35b401..57441e125 100644 --- a/samples/excel/99-just-for-fun/tetrominos.yaml +++ b/samples/excel/99-just-for-fun/tetrominos.yaml @@ -786,7 +786,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/excel/default.yaml b/samples/excel/default.yaml index 3198ff5da..c303f62eb 100644 --- a/samples/excel/default.yaml +++ b/samples/excel/default.yaml @@ -51,7 +51,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/onenote/default.yaml b/samples/onenote/default.yaml index 0b94d1a3f..16f59bda5 100644 --- a/samples/onenote/default.yaml +++ b/samples/onenote/default.yaml @@ -49,7 +49,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/10-roaming-settings/roaming-settings.yaml b/samples/outlook/10-roaming-settings/roaming-settings.yaml index 0933e6d36..a24b5e596 100644 --- a/samples/outlook/10-roaming-settings/roaming-settings.yaml +++ b/samples/outlook/10-roaming-settings/roaming-settings.yaml @@ -87,7 +87,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/15-item-custom-properties/load-set-get-save.yaml b/samples/outlook/15-item-custom-properties/load-set-get-save.yaml index b928ad2fa..cd2502b98 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/20-item-body/add-inline-base64-image.yaml b/samples/outlook/20-item-body/add-inline-base64-image.yaml index f2703f677..e97523983 100644 --- a/samples/outlook/20-item-body/add-inline-base64-image.yaml +++ b/samples/outlook/20-item-body/add-inline-base64-image.yaml @@ -94,7 +94,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 5c025a7ef..b283f7abd 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/20-item-body/get-body-format.yaml b/samples/outlook/20-item-body/get-body-format.yaml index 47d4cf236..b077f1147 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/20-item-body/get-selected-data.yaml b/samples/outlook/20-item-body/get-selected-data.yaml index 1a0e40c01..90a1a202e 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 3d282886b..1b363be09 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 d06c16a6d..e9b2a5b1c 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/20-item-body/replace-selected-text.yaml b/samples/outlook/20-item-body/replace-selected-text.yaml index 34d024049..425dcee0b 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 3fe6ed8c0..59b23949a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/25-item-save-and-close/close.yaml b/samples/outlook/25-item-save-and-close/close.yaml index f1d570d82..ffc78cc69 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/25-item-save-and-close/save.yaml b/samples/outlook/25-item-save-and-close/save.yaml index 46ee419e8..b6c26f24b 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 389395766..1f967c9d6 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 3a740a408..a0982310c 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 42763337a..7e9748c8a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 518027c02..ce60520d5 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 4bbed2e4b..5ce5b87d5 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 1dd835d97..072d05ed5 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 26113821c..9ddcf7cff 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 3292f062d..ae9a35cde 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 4fe385b64..6fa0dd908 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 4b32e4907..62ca0621e 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 @@ -71,7 +71,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 b55dea048..04fdaf781 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 @@ -71,7 +71,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 bc9aba7ac..aa1180826 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 @@ -77,7 +77,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 8257b8c87..cc3bf3fde 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 @@ -77,7 +77,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 c390cf2ac..39a3128ca 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 @@ -71,7 +71,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 dbb6417e7..cfa4204e8 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/35-notifications/add-getall-remove.yaml b/samples/outlook/35-notifications/add-getall-remove.yaml index 0748aa395..a864ce4d1 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/40-attachments/attachments-compose.yaml b/samples/outlook/40-attachments/attachments-compose.yaml index cb2133d03..6d26d5131 100644 --- a/samples/outlook/40-attachments/attachments-compose.yaml +++ b/samples/outlook/40-attachments/attachments-compose.yaml @@ -154,7 +154,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/40-attachments/get-attachment-content.yaml b/samples/outlook/40-attachments/get-attachment-content.yaml index 1e1cc2b27..b4c3f5fde 100644 --- a/samples/outlook/40-attachments/get-attachment-content.yaml +++ b/samples/outlook/40-attachments/get-attachment-content.yaml @@ -101,7 +101,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/40-attachments/get-attachments-read.yaml b/samples/outlook/40-attachments/get-attachments-read.yaml index 005ae16ed..1177cb2b2 100644 --- a/samples/outlook/40-attachments/get-attachments-read.yaml +++ b/samples/outlook/40-attachments/get-attachments-read.yaml @@ -53,7 +53,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/45-categories/work-with-categories.yaml b/samples/outlook/45-categories/work-with-categories.yaml index 5c8e29fc7..c547ef97a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/45-categories/work-with-master-categories.yaml b/samples/outlook/45-categories/work-with-master-categories.yaml index 3fd458afd..2e83b3645 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/50-recurrence/get-recurrence-read.yaml b/samples/outlook/50-recurrence/get-recurrence-read.yaml index ea91e9dc3..0d37bbe0a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/50-recurrence/get-series-id.yaml b/samples/outlook/50-recurrence/get-series-id.yaml index f702e3b58..e78ac2628 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 f8a417a86..d9eb6f01a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/55-display-items/display-existing-appointment.yaml b/samples/outlook/55-display-items/display-existing-appointment.yaml index 0539b19ec..aaa259233 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/55-display-items/display-existing-message.yaml b/samples/outlook/55-display-items/display-existing-message.yaml index 7fb9f46e1..4509b080b 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/55-display-items/display-new-appointment.yaml b/samples/outlook/55-display-items/display-new-appointment.yaml index 770c12e9a..f562ea6c9 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/55-display-items/display-new-message.yaml b/samples/outlook/55-display-items/display-new-message.yaml index 5aca34788..0302dc756 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/55-display-items/display-reply-forms.yaml b/samples/outlook/55-display-items/display-reply-forms.yaml index 1c8d46bfb..3759106b0 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 a8c28a08d..bb2dbd573 100644 --- a/samples/outlook/55-display-items/display-reply-with-attachments.yaml +++ b/samples/outlook/55-display-items/display-reply-with-attachments.yaml @@ -203,7 +203,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/60-sensitivity-label/sensitivity-label.yaml b/samples/outlook/60-sensitivity-label/sensitivity-label.yaml index 8b0db6aaa..6bda2298e 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml b/samples/outlook/60-sensitivity-label/sensitivity-labels-catalog.yaml index beb6aef86..4467e3f77 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 a38fcc94e..2a937c32d 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 12d2e2a8a..efdf1f74d 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 @@ -63,7 +63,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 9869ae0e5..78c540b7a 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 @@ -94,7 +94,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/75-regex-matches/contextual.yaml b/samples/outlook/75-regex-matches/contextual.yaml index 4be7a3f0a..c601055e2 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/80-events/drag-drop-item.yaml b/samples/outlook/80-events/drag-drop-item.yaml index 7fb596045..8496c37ad 100644 --- a/samples/outlook/80-events/drag-drop-item.yaml +++ b/samples/outlook/80-events/drag-drop-item.yaml @@ -66,7 +66,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml index 00fc8499a..e8c65bb22 100644 --- a/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml +++ b/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-attendee.yaml @@ -72,7 +72,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml index c782dc0a6..2ac46bca0 100644 --- a/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml +++ b/samples/outlook/85-tokens-for-exchange-on-premises/get-icaluid-as-organizer.yaml @@ -76,7 +76,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml index e31656ee1..d87c66aff 100644 --- a/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml +++ b/samples/outlook/85-tokens-for-exchange-on-premises/ids-and-urls.yaml @@ -55,7 +55,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml index c15444a51..b56e7e86d 100644 --- a/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml +++ b/samples/outlook/85-tokens-for-exchange-on-premises/make-ews-request-async.yaml @@ -61,7 +61,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/85-tokens-for-exchange-on-premises/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 index c2cd39c56..a9d4582cf 100644 --- a/samples/outlook/85-tokens-for-exchange-on-premises/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 @@ -64,7 +64,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml index 82cf1e8db..c60954ab4 100644 --- a/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml +++ b/samples/outlook/85-tokens-for-exchange-on-premises/user-callback-token.yaml @@ -52,7 +52,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml b/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml index 07e604373..35efaf934 100644 --- a/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml +++ b/samples/outlook/85-tokens-for-exchange-on-premises/user-identity-token.yaml @@ -51,7 +51,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 c5861ddc6..016265921 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 31a6bfe6b..6366043dc 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 @@ -108,7 +108,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/90-other-item-apis/get-conversation-id-message.yaml b/samples/outlook/90-other-item-apis/get-conversation-id-message.yaml index 7b5fee263..b95c68138 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 @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 033a58ce8..9966ed3f1 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 da459a365..172ec5713 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 @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 dd97e6de5..0ec907837 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 @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 dea58a0d0..0d9622fa0 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 6d06770a7..03c7207ed 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 6375abab8..2a94acc22 100644 --- a/samples/outlook/90-other-item-apis/get-end-read.yaml +++ b/samples/outlook/90-other-item-apis/get-end-read.yaml @@ -52,7 +52,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 02a3b9d8a..70f961e5e 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 37a258bd1..aa5c12ad2 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 @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 7c221cfce..a812e22ca 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 70e0759ba..fb319fb09 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 @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 806a76a70..93713bd74 100644 --- a/samples/outlook/90-other-item-apis/get-item-type.yaml +++ b/samples/outlook/90-other-item-apis/get-item-type.yaml @@ -48,7 +48,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 a568ae296..eaf183cf9 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 @@ -142,7 +142,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/90-other-item-apis/get-location-read.yaml b/samples/outlook/90-other-item-apis/get-location-read.yaml index 8647470b2..e476e5644 100644 --- a/samples/outlook/90-other-item-apis/get-location-read.yaml +++ b/samples/outlook/90-other-item-apis/get-location-read.yaml @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 652c9e01b..bae101012 100644 --- a/samples/outlook/90-other-item-apis/get-message-properties.yaml +++ b/samples/outlook/90-other-item-apis/get-message-properties.yaml @@ -70,7 +70,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/90-other-item-apis/get-normalized-subject-read.yaml b/samples/outlook/90-other-item-apis/get-normalized-subject-read.yaml index 38c75c1e6..cb2e43aa0 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 @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 4e8340ca6..3b63f5e14 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 @@ -89,7 +89,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/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 10abec6e5..0602dd47c 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 @@ -62,7 +62,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 bccf5570f..532504b1a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 ef459d16c..b956d94e0 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 @@ -82,7 +82,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 1a00f3831..7a78c2b10 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 @@ -62,7 +62,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 541f6c56e..076caa4ba 100644 --- a/samples/outlook/90-other-item-apis/get-start-read.yaml +++ b/samples/outlook/90-other-item-apis/get-start-read.yaml @@ -52,7 +52,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 08f83b678..446e6fc0a 100644 --- a/samples/outlook/90-other-item-apis/get-subject-read.yaml +++ b/samples/outlook/90-other-item-apis/get-subject-read.yaml @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 b2407b014..f277cc15d 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/outlook/90-other-item-apis/send-async.yaml b/samples/outlook/90-other-item-apis/send-async.yaml index 41ef2e0a8..84360408c 100644 --- a/samples/outlook/90-other-item-apis/send-async.yaml +++ b/samples/outlook/90-other-item-apis/send-async.yaml @@ -47,7 +47,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 d89b45d0c..1a38250ca 100644 --- a/samples/outlook/90-other-item-apis/session-data-apis.yaml +++ b/samples/outlook/90-other-item-apis/session-data-apis.yaml @@ -108,6 +108,6 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/90-other-item-apis/set-selected-data.yaml b/samples/outlook/90-other-item-apis/set-selected-data.yaml index 7d2be55ff..8336180c8 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 63cfa93df..f11357527 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/outlook/99-preview-apis/get-set-isalldayevent.yaml b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml index d9d8c44aa..275967e00 100644 --- a/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml +++ b/samples/outlook/99-preview-apis/get-set-isalldayevent.yaml @@ -63,7 +63,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js-preview/index.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 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 fcb27dd05..3763ab1c4 100644 --- a/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml +++ b/samples/outlook/99-preview-apis/set-displayed-body-subject.yaml @@ -80,7 +80,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js-preview/index.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 diff --git a/samples/outlook/default.yaml b/samples/outlook/default.yaml index 7d8729c82..7ccf69f33 100644 --- a/samples/outlook/default.yaml +++ b/samples/outlook/default.yaml @@ -34,7 +34,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/basics/basic-api-call-js.yaml b/samples/powerpoint/basics/basic-api-call-js.yaml index 903944372..5f421f9bb 100644 --- a/samples/powerpoint/basics/basic-api-call-js.yaml +++ b/samples/powerpoint/basics/basic-api-call-js.yaml @@ -61,7 +61,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/basics/basic-api-call-ts.yaml b/samples/powerpoint/basics/basic-api-call-ts.yaml index 9fce2f953..0761647c6 100644 --- a/samples/powerpoint/basics/basic-api-call-ts.yaml +++ b/samples/powerpoint/basics/basic-api-call-ts.yaml @@ -61,7 +61,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/basics/basic-common-api-call.yaml b/samples/powerpoint/basics/basic-common-api-call.yaml index 304c0f1d5..0f9d08860 100644 --- a/samples/powerpoint/basics/basic-common-api-call.yaml +++ b/samples/powerpoint/basics/basic-common-api-call.yaml @@ -41,7 +41,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/default.yaml b/samples/powerpoint/default.yaml index cbf9fc811..556474193 100644 --- a/samples/powerpoint/default.yaml +++ b/samples/powerpoint/default.yaml @@ -39,7 +39,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/document/create-presentation.yaml b/samples/powerpoint/document/create-presentation.yaml index a2c0b605f..fedd25925 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/powerpoint/hyperlinks/manage-hyperlinks.yaml b/samples/powerpoint/hyperlinks/manage-hyperlinks.yaml index d10d316b4..d5125be3a 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/images/insert-image.yaml b/samples/powerpoint/images/insert-image.yaml index bc432ec35..a1debdc9e 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/images/insert-svg.yaml b/samples/powerpoint/images/insert-svg.yaml index d3d66522e..563929e69 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml index 79139a157..41e403296 100644 --- a/samples/powerpoint/scenarios/searches-wikipedia-api.yaml +++ b/samples/powerpoint/scenarios/searches-wikipedia-api.yaml @@ -243,7 +243,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/shapes/add-modify-tables.yaml b/samples/powerpoint/shapes/add-modify-tables.yaml index df292f525..c9da7247f 100644 --- a/samples/powerpoint/shapes/add-modify-tables.yaml +++ b/samples/powerpoint/shapes/add-modify-tables.yaml @@ -408,7 +408,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts 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/shapes/binding-to-shapes.yaml b/samples/powerpoint/shapes/binding-to-shapes.yaml index 6059ca2ba..7eec3ed7b 100644 --- a/samples/powerpoint/shapes/binding-to-shapes.yaml +++ b/samples/powerpoint/shapes/binding-to-shapes.yaml @@ -361,7 +361,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts 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/shapes/get-set-shapes.yaml b/samples/powerpoint/shapes/get-set-shapes.yaml index 4e24db0c5..521242f6e 100644 --- a/samples/powerpoint/shapes/get-set-shapes.yaml +++ b/samples/powerpoint/shapes/get-set-shapes.yaml @@ -221,7 +221,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/powerpoint/shapes/get-shapes-by-type.yaml b/samples/powerpoint/shapes/get-shapes-by-type.yaml index 747202762..8e64c0bad 100644 --- a/samples/powerpoint/shapes/get-shapes-by-type.yaml +++ b/samples/powerpoint/shapes/get-shapes-by-type.yaml @@ -134,7 +134,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/powerpoint/shapes/group-ungroup-shapes.yaml b/samples/powerpoint/shapes/group-ungroup-shapes.yaml index 6d8e8f3fe..4021254cc 100644 --- a/samples/powerpoint/shapes/group-ungroup-shapes.yaml +++ b/samples/powerpoint/shapes/group-ungroup-shapes.yaml @@ -187,7 +187,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/shapes/shapes.yaml b/samples/powerpoint/shapes/shapes.yaml index da2850890..68c8d5c32 100644 --- a/samples/powerpoint/shapes/shapes.yaml +++ b/samples/powerpoint/shapes/shapes.yaml @@ -210,7 +210,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/powerpoint/slide-management/add-slides.yaml b/samples/powerpoint/slide-management/add-slides.yaml index ab7faeaa3..e7e5e89cb 100644 --- a/samples/powerpoint/slide-management/add-slides.yaml +++ b/samples/powerpoint/slide-management/add-slides.yaml @@ -98,7 +98,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/slide-management/export-import-slide.yaml b/samples/powerpoint/slide-management/export-import-slide.yaml index 20ba32a3a..391895002 100644 --- a/samples/powerpoint/slide-management/export-import-slide.yaml +++ b/samples/powerpoint/slide-management/export-import-slide.yaml @@ -297,7 +297,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - @types/office-js + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.d.ts 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/slide-management/get-set-slides.yaml b/samples/powerpoint/slide-management/get-set-slides.yaml index 9010a097e..cbb58a752 100644 --- a/samples/powerpoint/slide-management/get-set-slides.yaml +++ b/samples/powerpoint/slide-management/get-set-slides.yaml @@ -169,7 +169,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/powerpoint/slide-management/get-slide-metadata.yaml b/samples/powerpoint/slide-management/get-slide-metadata.yaml index 9a83ed396..35f71e6be 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/powerpoint/slide-management/insert-slides.yaml b/samples/powerpoint/slide-management/insert-slides.yaml index 399523abf..9429814d2 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/tags/tags.yaml b/samples/powerpoint/tags/tags.yaml index 45aa7828a..b2816d55d 100644 --- a/samples/powerpoint/tags/tags.yaml +++ b/samples/powerpoint/tags/tags.yaml @@ -198,7 +198,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/powerpoint/text/get-set-textrange.yaml b/samples/powerpoint/text/get-set-textrange.yaml index fa6cb92f2..f18a6beab 100644 --- a/samples/powerpoint/text/get-set-textrange.yaml +++ b/samples/powerpoint/text/get-set-textrange.yaml @@ -185,7 +185,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/project/basics/basic-common-api-call.yaml b/samples/project/basics/basic-common-api-call.yaml index 9a1b68aa0..95a440ed7 100644 --- a/samples/project/basics/basic-common-api-call.yaml +++ b/samples/project/basics/basic-common-api-call.yaml @@ -31,7 +31,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/project/default.yaml b/samples/project/default.yaml index 11f70dd5e..27aae8d65 100644 --- a/samples/project/default.yaml +++ b/samples/project/default.yaml @@ -39,7 +39,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/01-basics/basic-api-call-es5.yaml b/samples/word/01-basics/basic-api-call-es5.yaml index 29b33f94a..cf3ab1b5b 100644 --- a/samples/word/01-basics/basic-api-call-es5.yaml +++ b/samples/word/01-basics/basic-api-call-es5.yaml @@ -57,7 +57,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/01-basics/basic-api-call.yaml b/samples/word/01-basics/basic-api-call.yaml index d399bdfd1..468f154e1 100644 --- a/samples/word/01-basics/basic-api-call.yaml +++ b/samples/word/01-basics/basic-api-call.yaml @@ -58,7 +58,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/01-basics/basic-common-api-call.yaml b/samples/word/01-basics/basic-common-api-call.yaml index 02de4d908..a94c13e3b 100644 --- a/samples/word/01-basics/basic-common-api-call.yaml +++ b/samples/word/01-basics/basic-common-api-call.yaml @@ -44,7 +44,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 26ab14665..a21f0fbf7 100644 --- a/samples/word/10-content-controls/content-control-onadded-event.yaml +++ b/samples/word/10-content-controls/content-control-onadded-event.yaml @@ -130,7 +130,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/10-content-controls/content-control-ondatachanged-event.yaml b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml index fbead0ddb..9ca1c8006 100644 --- a/samples/word/10-content-controls/content-control-ondatachanged-event.yaml +++ b/samples/word/10-content-controls/content-control-ondatachanged-event.yaml @@ -148,7 +148,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/10-content-controls/content-control-ondeleted-event.yaml b/samples/word/10-content-controls/content-control-ondeleted-event.yaml index 1736cc338..cdbf945ff 100644 --- a/samples/word/10-content-controls/content-control-ondeleted-event.yaml +++ b/samples/word/10-content-controls/content-control-ondeleted-event.yaml @@ -168,7 +168,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/10-content-controls/content-control-onentered-event.yaml b/samples/word/10-content-controls/content-control-onentered-event.yaml index 09874c1db..cba1483af 100644 --- a/samples/word/10-content-controls/content-control-onentered-event.yaml +++ b/samples/word/10-content-controls/content-control-onentered-event.yaml @@ -148,7 +148,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/10-content-controls/content-control-onexited-event.yaml b/samples/word/10-content-controls/content-control-onexited-event.yaml index c12456e21..36950eef7 100644 --- a/samples/word/10-content-controls/content-control-onexited-event.yaml +++ b/samples/word/10-content-controls/content-control-onexited-event.yaml @@ -149,7 +149,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/10-content-controls/content-control-onselectionchanged-event.yaml b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml index 531e7a23a..377dc3061 100644 --- a/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml +++ b/samples/word/10-content-controls/content-control-onselectionchanged-event.yaml @@ -147,7 +147,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/10-content-controls/get-change-tracking-states.yaml b/samples/word/10-content-controls/get-change-tracking-states.yaml index b874d6b6d..6e7804c55 100644 --- a/samples/word/10-content-controls/get-change-tracking-states.yaml +++ b/samples/word/10-content-controls/get-change-tracking-states.yaml @@ -161,7 +161,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 2904ffa23..de1450052 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 @@ -234,7 +234,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/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 5dca81e43..75d803917 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 @@ -310,7 +310,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/10-content-controls/insert-and-change-content-controls.yaml b/samples/word/10-content-controls/insert-and-change-content-controls.yaml index 00f9ac93e..0221fc952 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 @@ -137,7 +137,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/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 ff1ef0479..c91d99dd9 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 @@ -312,7 +312,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/15-images/insert-and-get-pictures.yaml b/samples/word/15-images/insert-and-get-pictures.yaml index a24cb7b69..1857f2392 100644 --- a/samples/word/15-images/insert-and-get-pictures.yaml +++ b/samples/word/15-images/insert-and-get-pictures.yaml @@ -106,7 +106,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/20-lists/insert-list.yaml b/samples/word/20-lists/insert-list.yaml index 6444834ce..801e8ef30 100644 --- a/samples/word/20-lists/insert-list.yaml +++ b/samples/word/20-lists/insert-list.yaml @@ -107,7 +107,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/20-lists/manage-list-styles.yaml b/samples/word/20-lists/manage-list-styles.yaml index 1fbd489f5..b382c43d4 100644 --- a/samples/word/20-lists/manage-list-styles.yaml +++ b/samples/word/20-lists/manage-list-styles.yaml @@ -105,6 +105,6 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/20-lists/organize-list.yaml b/samples/word/20-lists/organize-list.yaml index 5007a602d..9733c5a65 100644 --- a/samples/word/20-lists/organize-list.yaml +++ b/samples/word/20-lists/organize-list.yaml @@ -135,7 +135,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 536f169e4..ad67db11b 100644 --- a/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml +++ b/samples/word/25-paragraph/get-paragraph-on-insertion-point.yaml @@ -115,7 +115,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/25-paragraph/get-text.yaml b/samples/word/25-paragraph/get-text.yaml index 8190d75ae..af1de9577 100644 --- a/samples/word/25-paragraph/get-text.yaml +++ b/samples/word/25-paragraph/get-text.yaml @@ -95,7 +95,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/25-paragraph/get-word-count.yaml b/samples/word/25-paragraph/get-word-count.yaml index 7ab14f35c..95ea7e97d 100644 --- a/samples/word/25-paragraph/get-word-count.yaml +++ b/samples/word/25-paragraph/get-word-count.yaml @@ -122,7 +122,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/25-paragraph/insert-formatted-text.yaml b/samples/word/25-paragraph/insert-formatted-text.yaml index 77dec94c7..073882a0e 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/25-paragraph/insert-header-and-footer.yaml b/samples/word/25-paragraph/insert-header-and-footer.yaml index 61c5ce6bf..7e820b803 100644 --- a/samples/word/25-paragraph/insert-header-and-footer.yaml +++ b/samples/word/25-paragraph/insert-header-and-footer.yaml @@ -184,7 +184,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/25-paragraph/insert-in-different-locations.yaml b/samples/word/25-paragraph/insert-in-different-locations.yaml index 962ff5897..ad6572d46 100644 --- a/samples/word/25-paragraph/insert-in-different-locations.yaml +++ b/samples/word/25-paragraph/insert-in-different-locations.yaml @@ -150,7 +150,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 2bb69dff1..140084bfa 100644 --- a/samples/word/25-paragraph/insert-line-and-page-breaks.yaml +++ b/samples/word/25-paragraph/insert-line-and-page-breaks.yaml @@ -94,7 +94,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/25-paragraph/onadded-event.yaml b/samples/word/25-paragraph/onadded-event.yaml index b5989162c..9469153a3 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/25-paragraph/onchanged-event.yaml b/samples/word/25-paragraph/onchanged-event.yaml index 833138a41..1653214ae 100644 --- a/samples/word/25-paragraph/onchanged-event.yaml +++ b/samples/word/25-paragraph/onchanged-event.yaml @@ -115,7 +115,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/25-paragraph/ondeleted-event.yaml b/samples/word/25-paragraph/ondeleted-event.yaml index 28643099d..248a6de4c 100644 --- a/samples/word/25-paragraph/ondeleted-event.yaml +++ b/samples/word/25-paragraph/ondeleted-event.yaml @@ -115,7 +115,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/25-paragraph/paragraph-properties.yaml b/samples/word/25-paragraph/paragraph-properties.yaml index 43493a296..b0cb4b0af 100644 --- a/samples/word/25-paragraph/paragraph-properties.yaml +++ b/samples/word/25-paragraph/paragraph-properties.yaml @@ -149,7 +149,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/25-paragraph/search.yaml b/samples/word/25-paragraph/search.yaml index ea8337044..0dc258279 100644 --- a/samples/word/25-paragraph/search.yaml +++ b/samples/word/25-paragraph/search.yaml @@ -112,7 +112,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/30-properties/get-built-in-properties.yaml b/samples/word/30-properties/get-built-in-properties.yaml index 5eeb51d8d..0fe8a3dbd 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 600c31687..b09a55f54 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/35-ranges/compare-location.yaml b/samples/word/35-ranges/compare-location.yaml index c93592309..ca1a6bcb4 100644 --- a/samples/word/35-ranges/compare-location.yaml +++ b/samples/word/35-ranges/compare-location.yaml @@ -119,7 +119,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/35-ranges/get-pages.yaml b/samples/word/35-ranges/get-pages.yaml index c4b6584a3..15f5ca0e4 100644 --- a/samples/word/35-ranges/get-pages.yaml +++ b/samples/word/35-ranges/get-pages.yaml @@ -282,7 +282,7 @@ style: language: css libraries: | https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/35-ranges/scroll-to-range.yaml b/samples/word/35-ranges/scroll-to-range.yaml index 0bea961dd..b7fd13481 100644 --- a/samples/word/35-ranges/scroll-to-range.yaml +++ b/samples/word/35-ranges/scroll-to-range.yaml @@ -94,7 +94,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 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 8e23f4118..b0db6d9a3 100644 --- a/samples/word/35-ranges/split-words-of-first-paragraph.yaml +++ b/samples/word/35-ranges/split-words-of-first-paragraph.yaml @@ -94,7 +94,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/40-tables/manage-custom-style.yaml b/samples/word/40-tables/manage-custom-style.yaml index 9c6ab8360..cfd5c0258 100644 --- a/samples/word/40-tables/manage-custom-style.yaml +++ b/samples/word/40-tables/manage-custom-style.yaml @@ -429,7 +429,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/40-tables/manage-formatting.yaml b/samples/word/40-tables/manage-formatting.yaml index 4031cf690..9929afcd4 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/40-tables/table-cell-access.yaml b/samples/word/40-tables/table-cell-access.yaml index 283c41753..c4389b9d7 100644 --- a/samples/word/40-tables/table-cell-access.yaml +++ b/samples/word/40-tables/table-cell-access.yaml @@ -80,7 +80,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/45-shapes/group-ungroup.yaml b/samples/word/45-shapes/group-ungroup.yaml index e8e177aef..5e0ba2fc7 100644 --- a/samples/word/45-shapes/group-ungroup.yaml +++ b/samples/word/45-shapes/group-ungroup.yaml @@ -130,7 +130,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/45-shapes/manage-geometric-shapes.yaml b/samples/word/45-shapes/manage-geometric-shapes.yaml index 20b86ab84..85f037a1e 100644 --- a/samples/word/45-shapes/manage-geometric-shapes.yaml +++ b/samples/word/45-shapes/manage-geometric-shapes.yaml @@ -250,7 +250,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/45-shapes/manage-shapes-text-boxes.yaml b/samples/word/45-shapes/manage-shapes-text-boxes.yaml index 52c4599ee..d3ea00ddf 100644 --- a/samples/word/45-shapes/manage-shapes-text-boxes.yaml +++ b/samples/word/45-shapes/manage-shapes-text-boxes.yaml @@ -409,7 +409,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/compare-documents.yaml b/samples/word/50-document/compare-documents.yaml index 368c7dc05..70ee0b554 100644 --- a/samples/word/50-document/compare-documents.yaml +++ b/samples/word/50-document/compare-documents.yaml @@ -68,7 +68,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/50-document/get-external-styles.yaml b/samples/word/50-document/get-external-styles.yaml index 86aa2117b..3f7c74914 100644 --- a/samples/word/50-document/get-external-styles.yaml +++ b/samples/word/50-document/get-external-styles.yaml @@ -80,6 +80,6 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/50-document/insert-external-document.yaml b/samples/word/50-document/insert-external-document.yaml index 126961451..005d12d69 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/insert-section-breaks.yaml b/samples/word/50-document/insert-section-breaks.yaml index b870d7865..1ca46f47b 100644 --- a/samples/word/50-document/insert-section-breaks.yaml +++ b/samples/word/50-document/insert-section-breaks.yaml @@ -131,7 +131,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/50-document/manage-annotations.yaml b/samples/word/50-document/manage-annotations.yaml index 7fd3a5dab..344bbc495 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/50-document/manage-body.yaml b/samples/word/50-document/manage-body.yaml index c92791dab..0051442b5 100644 --- a/samples/word/50-document/manage-body.yaml +++ b/samples/word/50-document/manage-body.yaml @@ -409,7 +409,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/50-document/manage-change-tracking.yaml b/samples/word/50-document/manage-change-tracking.yaml index fa7f17120..e5b647f12 100644 --- a/samples/word/50-document/manage-change-tracking.yaml +++ b/samples/word/50-document/manage-change-tracking.yaml @@ -140,7 +140,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/50-document/manage-comments.yaml b/samples/word/50-document/manage-comments.yaml index 3fb2d2b1d..75a4ba5aa 100644 --- a/samples/word/50-document/manage-comments.yaml +++ b/samples/word/50-document/manage-comments.yaml @@ -291,7 +291,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-custom-xml-part-ns.yaml b/samples/word/50-document/manage-custom-xml-part-ns.yaml index 4f9b9c5f4..c40fe12a7 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-custom-xml-part.yaml b/samples/word/50-document/manage-custom-xml-part.yaml index 12f1de659..630a7587d 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-fields.yaml b/samples/word/50-document/manage-fields.yaml index 49a583f69..b60163bee 100644 --- a/samples/word/50-document/manage-fields.yaml +++ b/samples/word/50-document/manage-fields.yaml @@ -236,7 +236,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-footnotes.yaml b/samples/word/50-document/manage-footnotes.yaml index 32007812f..20115c5a3 100644 --- a/samples/word/50-document/manage-footnotes.yaml +++ b/samples/word/50-document/manage-footnotes.yaml @@ -236,7 +236,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-settings.yaml b/samples/word/50-document/manage-settings.yaml index 5c5b6a95d..a14fe7961 100644 --- a/samples/word/50-document/manage-settings.yaml +++ b/samples/word/50-document/manage-settings.yaml @@ -115,7 +115,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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-styles.yaml b/samples/word/50-document/manage-styles.yaml index 4c0347195..0398d69e9 100644 --- a/samples/word/50-document/manage-styles.yaml +++ b/samples/word/50-document/manage-styles.yaml @@ -337,6 +337,6 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/50-document/manage-tracked-changes.yaml b/samples/word/50-document/manage-tracked-changes.yaml index 3099bf706..30307f735 100644 --- a/samples/word/50-document/manage-tracked-changes.yaml +++ b/samples/word/50-document/manage-tracked-changes.yaml @@ -204,7 +204,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/save-close.yaml b/samples/word/50-document/save-close.yaml index 67ec5b4c8..5f8f691dc 100644 --- a/samples/word/50-document/save-close.yaml +++ b/samples/word/50-document/save-close.yaml @@ -131,7 +131,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/90-scenarios/correlated-objects-pattern.yaml b/samples/word/90-scenarios/correlated-objects-pattern.yaml index 7f2817061..32b972033 100644 --- a/samples/word/90-scenarios/correlated-objects-pattern.yaml +++ b/samples/word/90-scenarios/correlated-objects-pattern.yaml @@ -160,7 +160,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/90-scenarios/doc-assembly.yaml b/samples/word/90-scenarios/doc-assembly.yaml index 302701358..186206ba1 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/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/90-scenarios/multiple-property-set.yaml b/samples/word/90-scenarios/multiple-property-set.yaml index 144d2021a..bbd154569 100644 --- a/samples/word/90-scenarios/multiple-property-set.yaml +++ b/samples/word/90-scenarios/multiple-property-set.yaml @@ -106,7 +106,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 diff --git a/samples/word/99-preview-apis/close-document-window.yaml b/samples/word/99-preview-apis/close-document-window.yaml index a32de186a..7908cc0e5 100644 --- a/samples/word/99-preview-apis/close-document-window.yaml +++ b/samples/word/99-preview-apis/close-document-window.yaml @@ -55,7 +55,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - https://appsforoffice.microsoft.com/lib/beta/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js-preview/index.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/99-preview-apis/insert-and-change-content-controls.yaml b/samples/word/99-preview-apis/insert-and-change-content-controls.yaml index 70ace5471..c4f5761e8 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 @@ -195,7 +195,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js-preview/index.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/99-preview-apis/manage-comments.yaml b/samples/word/99-preview-apis/manage-comments.yaml index bdff83be1..8935b24d3 100644 --- a/samples/word/99-preview-apis/manage-comments.yaml +++ b/samples/word/99-preview-apis/manage-comments.yaml @@ -356,7 +356,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/beta/hosted/office.js - @types/office-js-preview + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js-preview/index.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/default.yaml b/samples/word/default.yaml index e7bc04740..d6e45d828 100644 --- a/samples/word/default.yaml +++ b/samples/word/default.yaml @@ -51,7 +51,7 @@ style: language: css libraries: |- https://appsforoffice.microsoft.com/lib/1/hosted/office.js - https://appsforoffice.microsoft.com/lib/1/hosted/office.d.ts + https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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 From c14abd55d1396aff07eaeb48762f7e0e5cfad42c Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Thu, 6 Nov 2025 16:03:43 -0800 Subject: [PATCH 334/336] [Word] (ShapeGroup) Show how to move and change (#1025) --- samples/word/45-shapes/group-ungroup.yaml | 127 +++++- snippet-extractor-metadata/word.xlsx | Bin 30177 -> 30900 bytes snippet-extractor-output/snippets.yaml | 470 +++++++++++++++++++++- 3 files changed, 583 insertions(+), 14 deletions(-) diff --git a/samples/word/45-shapes/group-ungroup.yaml b/samples/word/45-shapes/group-ungroup.yaml index 5e0ba2fc7..a5d902bdc 100644 --- a/samples/word/45-shapes/group-ungroup.yaml +++ b/samples/word/45-shapes/group-ungroup.yaml @@ -8,6 +8,10 @@ api_set: script: content: | document.getElementById("group-shapes").addEventListener("click", () => tryCatch(groupShapes)); + document.getElementById("move-group").addEventListener("click", () => tryCatch(moveGroup)); + document.getElementById("scale-group").addEventListener("click", () => tryCatch(scaleGroup)); + document.getElementById("change-group-position").addEventListener("click", () => tryCatch(changeGroupPosition)); + document.getElementById("change-group-size").addEventListener("click", () => tryCatch(changeGroupSize)); document.getElementById("ungroup-shapes").addEventListener("click", () => tryCatch(ungroupShapes)); document.getElementById("setup").addEventListener("click", () => tryCatch(setup)); @@ -23,7 +27,7 @@ script: const numShapes = shapes.items.length; if (numShapes === 0) { - console.log("No shapes found in document body."); + console.log("No shapes found in the document body."); return; } @@ -39,10 +43,105 @@ script: }); } + async function moveGroup() { + await Word.run(async (context) => { + // Moves the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to move the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.moveHorizontally(-10); + firstShapeGroup.moveVertically(50); + + console.log("Moved the first shape group."); + }); + } + + async function scaleGroup() { + await Word.run(async (context) => { + // Scales the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to scale the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.scaleHeight(0.75, Word.ShapeScaleType.currentSize); + firstShapeGroup.scaleWidth(0.5, Word.ShapeScaleType.currentSize, Word.ShapeScaleFrom.scaleFromBottomRight); + + console.log("Scaled the first shape group."); + }); + } + + async function changeGroupPosition() { + await Word.run(async (context) => { + // Changes the position of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the position of the first shape group found in document body:", shapeGroup.shapes); + firstShapeGroup.relativeVerticalPosition = Word.RelativeVerticalPosition.insideMargin; + firstShapeGroup.relativeHorizontalPosition = Word.RelativeHorizontalPosition.margin; + + console.log("Changed the position of the first shape group."); + }); + } + + async function changeGroupSize() { + await Word.run(async (context) => { + // Changes the relative size of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; + firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; + firstShapeGroup.heightRelative = 50; + + console.log("Changed the relative size of the first shape group."); + }); + } + async function ungroupShapes() { await Word.run(async (context) => { // Ungroups the first set of grouped shapes (including text boxes) found in the document body. - const firstShapeGroup: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.group]).getFirstOrNullObject(); + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); firstShapeGroup.load("shapeGroup/shapes"); await context.sync(); @@ -52,10 +151,10 @@ script: } let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; - console.log("About to ungroup first shape group found in document body:", shapeGroup.shapes); + console.log("About to ungroup the first shape group found in the document body:", shapeGroup.shapes); shapeGroup.ungroup(); - console.log("Ungrouped first shape group."); + console.log("Ungrouped the first shape group."); }); } @@ -108,11 +207,23 @@ template:

      Try it out

      + Group shapes + + + + + + Ungroup shapes +
      language: html style: diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 34a032ed5e7df889faf62124f7a2baa74d08a25f..10d80988dec4bc9d773e2255fadc52e5171fcf5e 100644 GIT binary patch delta 13721 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 Aod5s; diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index dbbaf1309..4471b1afb 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -27658,6 +27658,85 @@ Word.RangeLocation:enum: console.log(sentencesToTheEndOfParagraph.items[i].text); } }); +Word.RelativeHorizontalPosition:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the position of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the position of the first shape group found in document body:", shapeGroup.shapes); + firstShapeGroup.relativeVerticalPosition = Word.RelativeVerticalPosition.insideMargin; + firstShapeGroup.relativeHorizontalPosition = Word.RelativeHorizontalPosition.margin; + + console.log("Changed the position of the first shape group."); + }); +Word.RelativeSize:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the relative size of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; + firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; + firstShapeGroup.heightRelative = 50; + + console.log("Changed the relative size of the first shape group."); + }); +Word.RelativeVerticalPosition:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the position of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the position of the first shape group found in document body:", shapeGroup.shapes); + firstShapeGroup.relativeVerticalPosition = Word.RelativeVerticalPosition.insideMargin; + firstShapeGroup.relativeHorizontalPosition = Word.RelativeHorizontalPosition.margin; + + console.log("Changed the position of the first shape group."); + }); Word.SaveBehavior:enum: - >- // Link to full sample: @@ -27993,6 +28072,141 @@ Word.Shape#delete:member(1): console.log("The first text box in document was deleted."); }); +Word.Shape#group:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Groups the shapes (including text boxes) found in the document body. + const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ + Word.ShapeType.geometricShape, + Word.ShapeType.textBox, + ]); + shapes.load("items"); + await context.sync(); + + const numShapes = shapes.items.length; + if (numShapes === 0) { + console.log("No shapes found in the document body."); + return; + } + + console.log(`Number of shapes to group: ${numShapes}`); + + const groupedShape: Word.Shape = shapes.group(); + groupedShape.load("shapeGroup/shapes"); + await context.sync(); + + const shapeGroup: Word.ShapeGroup = groupedShape.shapeGroup; + console.log("Shapes grouped:", shapeGroup.shapes); + groupedShape.select(); + }); +Word.Shape#moveHorizontally:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Moves the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to move the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.moveHorizontally(-10); + firstShapeGroup.moveVertically(50); + + console.log("Moved the first shape group."); + }); +Word.Shape#moveVertically:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Moves the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to move the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.moveHorizontally(-10); + firstShapeGroup.moveVertically(50); + + console.log("Moved the first shape group."); + }); +Word.Shape#scaleHeight:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Scales the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to scale the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.scaleHeight(0.75, Word.ShapeScaleType.currentSize); + firstShapeGroup.scaleWidth(0.5, Word.ShapeScaleType.currentSize, Word.ShapeScaleFrom.scaleFromBottomRight); + + console.log("Scaled the first shape group."); + }); +Word.Shape#scaleWidth:member(1): + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Scales the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to scale the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.scaleHeight(0.75, Word.ShapeScaleType.currentSize); + firstShapeGroup.scaleWidth(0.5, Word.ShapeScaleType.currentSize, Word.ShapeScaleFrom.scaleFromBottomRight); + + console.log("Scaled the first shape group."); + }); Word.Shape#select:member(1): - >- // Link to full sample: @@ -28010,7 +28224,7 @@ Word.Shape#select:member(1): const numShapes = shapes.items.length; if (numShapes === 0) { - console.log("No shapes found in document body."); + console.log("No shapes found in the document body."); return; } @@ -28097,6 +28311,170 @@ Word.Shape#geometricShapeType:member: geometricShape, ); }); +Word.Shape#heightRelative:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the relative size of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; + firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; + firstShapeGroup.heightRelative = 50; + + console.log("Changed the relative size of the first shape group."); + }); +Word.Shape#relativeHorizontalPosition:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the position of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the position of the first shape group found in document body:", shapeGroup.shapes); + firstShapeGroup.relativeVerticalPosition = Word.RelativeVerticalPosition.insideMargin; + firstShapeGroup.relativeHorizontalPosition = Word.RelativeHorizontalPosition.margin; + + console.log("Changed the position of the first shape group."); + }); +Word.Shape#relativeHorizontalSize:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the relative size of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; + firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; + firstShapeGroup.heightRelative = 50; + + console.log("Changed the relative size of the first shape group."); + }); +Word.Shape#relativeVerticalPosition:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the position of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the position of the first shape group found in document body:", shapeGroup.shapes); + firstShapeGroup.relativeVerticalPosition = Word.RelativeVerticalPosition.insideMargin; + firstShapeGroup.relativeHorizontalPosition = Word.RelativeHorizontalPosition.margin; + + console.log("Changed the position of the first shape group."); + }); +Word.Shape#relativeVerticalSize:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Changes the relative size of the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; + firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; + firstShapeGroup.heightRelative = 50; + + console.log("Changed the relative size of the first shape group."); + }); +Word.Shape#shapeGroup:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Groups the shapes (including text boxes) found in the document body. + const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ + Word.ShapeType.geometricShape, + Word.ShapeType.textBox, + ]); + shapes.load("items"); + await context.sync(); + + const numShapes = shapes.items.length; + if (numShapes === 0) { + console.log("No shapes found in the document body."); + return; + } + + console.log(`Number of shapes to group: ${numShapes}`); + + const groupedShape: Word.Shape = shapes.group(); + groupedShape.load("shapeGroup/shapes"); + await context.sync(); + + const shapeGroup: Word.ShapeGroup = groupedShape.shapeGroup; + console.log("Shapes grouped:", shapeGroup.shapes); + groupedShape.select(); + }); Word.Shape#textFrame:member: - >- // Link to full sample: @@ -28300,7 +28678,7 @@ Word.ShapeCollection#group:member(1): const numShapes = shapes.items.length; if (numShapes === 0) { - console.log("No shapes found in document body."); + console.log("No shapes found in the document body."); return; } @@ -28443,7 +28821,7 @@ Word.ShapeGroup:class: const numShapes = shapes.items.length; if (numShapes === 0) { - console.log("No shapes found in document body."); + console.log("No shapes found in the document body."); return; } @@ -28465,7 +28843,9 @@ Word.ShapeGroup#ungroup:member(1): await Word.run(async (context) => { // Ungroups the first set of grouped shapes (including text boxes) found in the document body. - const firstShapeGroup: Word.Shape = context.document.body.shapes.getByTypes([Word.ShapeType.group]).getFirstOrNullObject(); + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); firstShapeGroup.load("shapeGroup/shapes"); await context.sync(); @@ -28475,10 +28855,88 @@ Word.ShapeGroup#ungroup:member(1): } let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; - console.log("About to ungroup first shape group found in document body:", shapeGroup.shapes); + console.log("About to ungroup the first shape group found in the document body:", shapeGroup.shapes); shapeGroup.ungroup(); - console.log("Ungrouped first shape group."); + console.log("Ungrouped the first shape group."); + }); +Word.ShapeGroup#shapes:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Moves the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to move the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.moveHorizontally(-10); + firstShapeGroup.moveVertically(50); + + console.log("Moved the first shape group."); + }); +Word.ShapeScaleFrom:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Scales the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to scale the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.scaleHeight(0.75, Word.ShapeScaleType.currentSize); + firstShapeGroup.scaleWidth(0.5, Word.ShapeScaleType.currentSize, Word.ShapeScaleFrom.scaleFromBottomRight); + + console.log("Scaled the first shape group."); + }); +Word.ShapeScaleType:enum: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml + + + await Word.run(async (context) => { + // Scales the first set of grouped shapes (including text boxes) found in the document body. + const firstShapeGroup: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.group]) + .getFirstOrNullObject(); + firstShapeGroup.load("shapeGroup/shapes"); + await context.sync(); + + if (firstShapeGroup.isNullObject) { + console.log("No shape groups found in the document body."); + return; + } + + let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; + console.log("About to scale the first shape group found in the document body:", shapeGroup.shapes); + firstShapeGroup.scaleHeight(0.75, Word.ShapeScaleType.currentSize); + firstShapeGroup.scaleWidth(0.5, Word.ShapeScaleType.currentSize, Word.ShapeScaleFrom.scaleFromBottomRight); + + console.log("Scaled the first shape group."); }); Word.ShapeTextOrientation:enum: - >- From 856434921013103c14fb0b443a8938cb47a77607 Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 7 Nov 2025 14:05:34 -0800 Subject: [PATCH 335/336] [Word] (ShapeGroup) Include picture shape (#1028) --- samples/word/45-shapes/group-ungroup.yaml | 30 ++++++++++++-- snippet-extractor-output/snippets.yaml | 50 ++++++++++++++++++----- 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/samples/word/45-shapes/group-ungroup.yaml b/samples/word/45-shapes/group-ungroup.yaml index a5d902bdc..f00f561b8 100644 --- a/samples/word/45-shapes/group-ungroup.yaml +++ b/samples/word/45-shapes/group-ungroup.yaml @@ -17,10 +17,11 @@ script: async function groupShapes() { await Word.run(async (context) => { - // Groups the shapes (including text boxes) found in the document body. + // Groups the shapes (including text boxes and pictures) found in the document body. const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ Word.ShapeType.geometricShape, Word.ShapeType.textBox, + Word.ShapeType.picture, ]); shapes.load("items"); await context.sync(); @@ -127,7 +128,10 @@ script: } let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; - console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + console.log( + "About to change the relative size of the first shape group found in the document body:", + shapeGroup.shapes, + ); firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; firstShapeGroup.heightRelative = 50; @@ -162,6 +166,7 @@ script: await Word.run(async (context) => { const body: Word.Body = context.document.body; body.clear(); + const lastParagraph: Word.Paragraph = body.paragraphs.getLast(); // Inserts a text box. const textBoxOptions: Word.InsertShapeOptions = { @@ -170,7 +175,7 @@ script: height: 100, width: 100, }; - body.paragraphs.getLast().insertTextBox("placeholder text", textBoxOptions); + lastParagraph.insertTextBox("placeholder text", textBoxOptions); // Inserts a geometric shape. const geometricShapeOptions: Word.InsertShapeOptions = { @@ -178,11 +183,28 @@ script: width: 120, left: 120, }; - body.paragraphs.getLast().insertGeometricShape(Word.GeometricShapeType.star24, geometricShapeOptions); + lastParagraph.insertGeometricShape(Word.GeometricShapeType.star24, geometricShapeOptions); + + // Inserts a picture. + const pictureOptions: Word.InsertShapeOptions = { + top: 120, + left: 60, + height: 150, + width: 150, + }; + lastParagraph.insertPictureFromBase64(getPictureBase64(), pictureOptions); + await context.sync(); }); } + 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 { diff --git a/snippet-extractor-output/snippets.yaml b/snippet-extractor-output/snippets.yaml index 4471b1afb..0ea0b4bf4 100644 --- a/snippet-extractor-output/snippets.yaml +++ b/snippet-extractor-output/snippets.yaml @@ -26563,6 +26563,7 @@ Word.Paragraph#insertGeometricShape:member(1): await Word.run(async (context) => { const body: Word.Body = context.document.body; body.clear(); + const lastParagraph: Word.Paragraph = body.paragraphs.getLast(); // Inserts a text box. const textBoxOptions: Word.InsertShapeOptions = { @@ -26571,7 +26572,7 @@ Word.Paragraph#insertGeometricShape:member(1): height: 100, width: 100, }; - body.paragraphs.getLast().insertTextBox("placeholder text", textBoxOptions); + lastParagraph.insertTextBox("placeholder text", textBoxOptions); // Inserts a geometric shape. const geometricShapeOptions: Word.InsertShapeOptions = { @@ -26579,7 +26580,17 @@ Word.Paragraph#insertGeometricShape:member(1): width: 120, left: 120, }; - body.paragraphs.getLast().insertGeometricShape(Word.GeometricShapeType.star24, geometricShapeOptions); + lastParagraph.insertGeometricShape(Word.GeometricShapeType.star24, geometricShapeOptions); + + // Inserts a picture. + const pictureOptions: Word.InsertShapeOptions = { + top: 120, + left: 60, + height: 150, + width: 150, + }; + lastParagraph.insertPictureFromBase64(getPictureBase64(), pictureOptions); + await context.sync(); }); Word.Paragraph#insertText:member(1): @@ -27704,7 +27715,10 @@ Word.RelativeSize:enum: } let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; - console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + console.log( + "About to change the relative size of the first shape group found in the document body:", + shapeGroup.shapes, + ); firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; firstShapeGroup.heightRelative = 50; @@ -28079,10 +28093,11 @@ Word.Shape#group:member(1): await Word.run(async (context) => { - // Groups the shapes (including text boxes) found in the document body. + // Groups the shapes (including text boxes and pictures) found in the document body. const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ Word.ShapeType.geometricShape, Word.ShapeType.textBox, + Word.ShapeType.picture, ]); shapes.load("items"); await context.sync(); @@ -28214,10 +28229,11 @@ Word.Shape#select:member(1): await Word.run(async (context) => { - // Groups the shapes (including text boxes) found in the document body. + // Groups the shapes (including text boxes and pictures) found in the document body. const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ Word.ShapeType.geometricShape, Word.ShapeType.textBox, + Word.ShapeType.picture, ]); shapes.load("items"); await context.sync(); @@ -28331,7 +28347,10 @@ Word.Shape#heightRelative:member: } let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; - console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + console.log( + "About to change the relative size of the first shape group found in the document body:", + shapeGroup.shapes, + ); firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; firstShapeGroup.heightRelative = 50; @@ -28384,7 +28403,10 @@ Word.Shape#relativeHorizontalSize:member: } let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; - console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + console.log( + "About to change the relative size of the first shape group found in the document body:", + shapeGroup.shapes, + ); firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; firstShapeGroup.heightRelative = 50; @@ -28437,7 +28459,10 @@ Word.Shape#relativeVerticalSize:member: } let shapeGroup: Word.ShapeGroup = firstShapeGroup.shapeGroup; - console.log("About to change the relative size of the first shape group found in the document body:", shapeGroup.shapes); + console.log( + "About to change the relative size of the first shape group found in the document body:", + shapeGroup.shapes, + ); firstShapeGroup.relativeHorizontalSize = Word.RelativeSize.insideMargin; firstShapeGroup.relativeVerticalSize = Word.RelativeSize.bottomMargin; firstShapeGroup.heightRelative = 50; @@ -28451,10 +28476,11 @@ Word.Shape#shapeGroup:member: await Word.run(async (context) => { - // Groups the shapes (including text boxes) found in the document body. + // Groups the shapes (including text boxes and pictures) found in the document body. const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ Word.ShapeType.geometricShape, Word.ShapeType.textBox, + Word.ShapeType.picture, ]); shapes.load("items"); await context.sync(); @@ -28668,10 +28694,11 @@ Word.ShapeCollection#group:member(1): await Word.run(async (context) => { - // Groups the shapes (including text boxes) found in the document body. + // Groups the shapes (including text boxes and pictures) found in the document body. const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ Word.ShapeType.geometricShape, Word.ShapeType.textBox, + Word.ShapeType.picture, ]); shapes.load("items"); await context.sync(); @@ -28811,10 +28838,11 @@ Word.ShapeGroup:class: await Word.run(async (context) => { - // Groups the shapes (including text boxes) found in the document body. + // Groups the shapes (including text boxes and pictures) found in the document body. const shapes: Word.ShapeCollection = context.document.body.shapes.getByTypes([ Word.ShapeType.geometricShape, Word.ShapeType.textBox, + Word.ShapeType.picture, ]); shapes.load("items"); await context.sync(); From 0c669a450ccf5fe545db0d97063f9649a20383ff Mon Sep 17 00:00:00 2001 From: Elizabeth Samuel Date: Fri, 7 Nov 2025 14:06:10 -0800 Subject: [PATCH 336/336] [Word] (Canvas) Add snippet (#1027) --- playlists-prod/word.yaml | 9 + playlists/word.yaml | 9 + samples/word/45-shapes/manage-canvases.yaml | 166 ++++++++++++++++++ .../45-shapes/manage-shapes-text-boxes.yaml | 12 +- snippet-extractor-metadata/word.xlsx | Bin 30900 -> 30923 bytes snippet-extractor-output/snippets.yaml | 96 ++++++++-- view-prod/word.json | 1 + view/word.json | 1 + 8 files changed, 273 insertions(+), 21 deletions(-) create mode 100644 samples/word/45-shapes/manage-canvases.yaml diff --git a/playlists-prod/word.yaml b/playlists-prod/word.yaml index f4da6c600..f55d4a138 100644 --- a/playlists-prod/word.yaml +++ b/playlists-prod/word.yaml @@ -404,6 +404,15 @@ group: Shapes api_set: WordApiDesktop: '1.2' +- id: word-shapes-manage-canvases + name: Work with canvases + fileName: manage-canvases.yaml + description: Shows how to work with canvases. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-canvases.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml diff --git a/playlists/word.yaml b/playlists/word.yaml index 8964fdc82..d36dd59b1 100644 --- a/playlists/word.yaml +++ b/playlists/word.yaml @@ -404,6 +404,15 @@ group: Shapes api_set: WordApiDesktop: '1.2' +- id: word-shapes-manage-canvases + name: Work with canvases + fileName: manage-canvases.yaml + description: Shows how to work with canvases. + rawUrl: >- + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-canvases.yaml + group: Shapes + api_set: + WordApiDesktop: '1.2' - id: word-document-manage-body name: Manage body fileName: manage-body.yaml diff --git a/samples/word/45-shapes/manage-canvases.yaml b/samples/word/45-shapes/manage-canvases.yaml new file mode 100644 index 000000000..b72469008 --- /dev/null +++ b/samples/word/45-shapes/manage-canvases.yaml @@ -0,0 +1,166 @@ +order: 4 +id: word-shapes-manage-canvases +name: Work with canvases +description: Shows how to work with canvases. +host: WORD +api_set: + WordApiDesktop: '1.2' +script: + content: | + document.getElementById("insert-canvas").addEventListener("click", () => tryCatch(insertCanvas)); + document.getElementById("get-canvases").addEventListener("click", () => tryCatch(getCanvases)); + document.getElementById("get-first-canvas").addEventListener("click", () => tryCatch(getFirstCanvas)); + document.getElementById("move-first-canvas").addEventListener("click", () => tryCatch(moveFirstCanvas)); + document.getElementById("delete-first-canvas").addEventListener("click", () => tryCatch(deleteFirstCanvas)); + + async function insertCanvas() { + await Word.run(async (context) => { + // Inserts a canvas in the document. + const canvasShape: Word.Shape = context.document.getSelection().insertCanvas(); + canvasShape.load(); + await context.sync(); + + canvasShape.select(); + console.log("Inserted canvas:", canvasShape); + + const canvas: Word.Canvas = canvasShape.canvas; + canvas.load("shape,shapes"); + await context.sync(); + + console.log("Canvas object:", canvas); + }); + } + + async function getCanvases() { + await Word.run(async (context) => { + // Gets the canvases found in the document body. + const canvases: Word.ShapeCollection = context.document.body.shapes.getByTypes([Word.ShapeType.canvas]); + canvases.load("items"); + await context.sync(); + + if (canvases.items.length == 0) { + console.log("No canvases found in the document body."); + return; + } + + console.log("Canvases found in the document body:", canvases); + }); + } + + async function getFirstCanvas() { + await Word.run(async (context) => { + // Gets the first canvas found in the document body. + const canvasShape: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.canvas]) + .getFirstOrNullObject(); + canvasShape.load(); + canvasShape.load("canvas/shapes"); + await context.sync(); + + if (canvasShape.isNullObject) { + console.log("No canvases found in the document body."); + return; + } + + console.log("First canvas found in the document body:", canvasShape); + console.log("Shapes associated with the first canvas:", canvasShape.canvas.shapes); + canvasShape.select(); + }); + } + + async function moveFirstCanvas() { + await Word.run(async (context) => { + // Moves the first canvas found in the document body. + const canvasShape: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.canvas]) + .getFirstOrNullObject(); + canvasShape.load(); + canvasShape.load("canvas/shapes"); + await context.sync(); + + if (canvasShape.isNullObject) { + console.log("No canvases found in the document body."); + return; + } + + console.log("First canvas found in the document body:", canvasShape); + canvasShape.moveHorizontally(50); + canvasShape.moveVertically(-10); + console.log("Moved the first canvas."); + }); + } + + async function deleteFirstCanvas() { + await Word.run(async (context) => { + // Deletes the first canvas found in the document body. + const canvasShape: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.canvas]) + .getFirstOrNullObject(); + canvasShape.load(); + canvasShape.load("canvas/shapes"); + await context.sync(); + + if (canvasShape.isNullObject) { + console.log("No canvases found in the document body."); + return; + } + + console.log("First canvas found in the document body:", canvasShape); + canvasShape.delete(); + console.log("Deleted the first canvas."); + }); + } + + // 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 canvases. +
      +
      +

      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://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/office-js/index.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/45-shapes/manage-shapes-text-boxes.yaml b/samples/word/45-shapes/manage-shapes-text-boxes.yaml index d3ea00ddf..ef91e7153 100644 --- a/samples/word/45-shapes/manage-shapes-text-boxes.yaml +++ b/samples/word/45-shapes/manage-shapes-text-boxes.yaml @@ -79,7 +79,7 @@ script: } }); } else { - console.log("No shapes found in main document."); + console.log("No shapes found in the main document."); } }); } @@ -92,7 +92,7 @@ script: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -130,7 +130,7 @@ script: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -146,7 +146,7 @@ script: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -184,7 +184,7 @@ script: console.log( shape.isNullObject - ? "No shapes with text boxes found in main document." + ? "No shapes with text boxes found in the main document." : `Text in first text box: ${shape.body.text}` ); }); @@ -295,7 +295,7 @@ script: } }); } else { - console.log("No shapes found in header."); + console.log("No shapes found in the header."); } }); } diff --git a/snippet-extractor-metadata/word.xlsx b/snippet-extractor-metadata/word.xlsx index 10d80988dec4bc9d773e2255fadc52e5171fcf5e..8ec0f93babb2f7467432592a58917fb86bbb89d7 100644 GIT binary patch delta 18081 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 G0000AI~hg* delta 18059 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 + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-canvases.yaml + + + await Word.run(async (context) => { + // Inserts a canvas in the document. + const canvasShape: Word.Shape = context.document.getSelection().insertCanvas(); + canvasShape.load(); + await context.sync(); + + canvasShape.select(); + console.log("Inserted canvas:", canvasShape); + + const canvas: Word.Canvas = canvasShape.canvas; + canvas.load("shape,shapes"); + await context.sync(); + + console.log("Canvas object:", canvas); + }); +Word.Canvas#shapes:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-canvases.yaml + + + await Word.run(async (context) => { + // Gets the first canvas found in the document body. + const canvasShape: Word.Shape = context.document.body.shapes + .getByTypes([Word.ShapeType.canvas]) + .getFirstOrNullObject(); + canvasShape.load(); + canvasShape.load("canvas/shapes"); + await context.sync(); + + if (canvasShape.isNullObject) { + console.log("No canvases found in the document body."); + return; + } + + console.log("First canvas found in the document body:", canvasShape); + console.log("Shapes associated with the first canvas:", canvasShape.canvas.shapes); + canvasShape.select(); + }); Word.CellPaddingLocation:enum: - >- // Link to full sample: @@ -28275,6 +28320,27 @@ Word.Shape#body:member: console.log("New content control properties:", newControl); }); +Word.Shape#canvas:member: + - >- + // Link to full sample: + https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-canvases.yaml + + + await Word.run(async (context) => { + // Inserts a canvas in the document. + const canvasShape: Word.Shape = context.document.getSelection().insertCanvas(); + canvasShape.load(); + await context.sync(); + + canvasShape.select(); + console.log("Inserted canvas:", canvasShape); + + const canvas: Word.Canvas = canvasShape.canvas; + canvas.load("shape,shapes"); + await context.sync(); + + console.log("Canvas object:", canvas); + }); Word.Shape#fill:member: - >- // Link to full sample: @@ -28514,7 +28580,7 @@ Word.Shape#textFrame:member: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -28533,7 +28599,7 @@ Word.Shape#textWrap:member: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -28561,7 +28627,7 @@ Word.Shape#type:member: } }); } else { - console.log("No shapes found in main document."); + console.log("No shapes found in the main document."); } }); Word.ShapeAutoSize:enum: @@ -28577,7 +28643,7 @@ Word.ShapeAutoSize:enum: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -28610,7 +28676,7 @@ Word.ShapeCollection:class: } }); } else { - console.log("No shapes found in main document."); + console.log("No shapes found in the main document."); } }); Word.ShapeCollection#getByGeometricTypes:member(1): @@ -28683,7 +28749,7 @@ Word.ShapeCollection#getFirstOrNullObject:member(1): console.log( shape.isNullObject - ? "No shapes with text boxes found in main document." + ? "No shapes with text boxes found in the main document." : `Text in first text box: ${shape.body.text}` ); }); @@ -28979,7 +29045,7 @@ Word.ShapeTextOrientation:enum: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -29003,7 +29069,7 @@ Word.ShapeTextVerticalAlignment:enum: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -29027,7 +29093,7 @@ Word.ShapeTextWrap:class: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -29155,7 +29221,7 @@ Word.ShapeType:enum: } }); } else { - console.log("No shapes found in main document."); + console.log("No shapes found in the main document."); } }); Word.Style:class: @@ -30008,7 +30074,7 @@ Word.TextFrame:class: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -30027,7 +30093,7 @@ Word.TextFrame#autoSizeSetting:member: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -30051,7 +30117,7 @@ Word.TextFrame#orientation:member: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } @@ -30075,7 +30141,7 @@ Word.TextFrame#verticalAlignment:member: await context.sync(); if (shape.isNullObject) { - console.log("No shapes with text boxes found in main document."); + console.log("No shapes with text boxes found in the main document."); return; } diff --git a/view-prod/word.json b/view-prod/word.json index dd9bcf337..af44ad5a0 100644 --- a/view-prod/word.json +++ b/view-prod/word.json @@ -41,6 +41,7 @@ "word-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-shapes-text-boxes.yaml", "word-shapes-manage-geometric-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-geometric-shapes.yaml", "word-shapes-group-ungroup": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/group-ungroup.yaml", + "word-shapes-manage-canvases": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/prod/samples/word/45-shapes/manage-canvases.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", diff --git a/view/word.json b/view/word.json index 6a953065a..3e0da2a29 100644 --- a/view/word.json +++ b/view/word.json @@ -41,6 +41,7 @@ "word-shapes-manage-shapes-text-boxes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-shapes-text-boxes.yaml", "word-shapes-manage-geometric-shapes": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-geometric-shapes.yaml", "word-shapes-group-ungroup": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/group-ungroup.yaml", + "word-shapes-manage-canvases": "https://raw.githubusercontent.com/OfficeDev/office-js-snippets/main/samples/word/45-shapes/manage-canvases.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",